2012-04-12 15 views
2

私はjson.netを使用して、IISホストの安価なサービスでjsonの非直列化を処理しています。Json.netが複合型リストの逆シリアル化に失敗しました

まずは、私が処理しようとしているオブジェクトを示します。

[DataContract] 
public class CreateSamplesRequest 
{ 
    [DataMember] public Guid SessionId { get; set; } 
    [DataMember] public SampleTemplateDTO Template { get; set; } 
} 
[DataContract] 
public class SampleTemplateDTO 
{ 
    [DataMember] public int NumberOfSamples { get; set; } 
    [DataMember] public int CompanyId { get; set; } 
    [DataMember] public int SampleTypeId { get; set; } 
    [DataMember] public HmisDTO Hmis { get; set; } 
    [DataMember] public List<AttributeValueDTO> AttributeValues { get; set; } 
} 
[DataContract] 
public class AttributeValueDTO 
{ 
    [DataMember] public int AttributeId { get; set; } 
    [DataMember] public string AttributeName { get; set; } 
    [DataMember] public string Value { get; set; } 
} 

[DataContract] 
public class HmisDTO 
{ 
    [DataMember] public string Health { get; set; } 
    [DataMember] public string Flammability { get; set; } 
    [DataMember] public string Reactivity { get; set; } 
    [DataMember] public string Equipment { get; set; } 
} 

ヘルプページはCreateSamplesRequest

{ 
"SessionId":"1627aea5-8e0a-4371-9022-9b504344e724", 
"Template":{ 
    "NumberOfSamples":2147483647, 
    "CompanyId":2147483647, 
    "SampleTypeId":2147483647, 
    "Hmis":{ 
     "Health":"String content", 
     "Flammability":"String content", 
     "Reactivity":"String content", 
     "Equipment":"String content" 
    }, 
    "AttributeValues":[{ 
     "AttributeId":2147483647, 
     "AttributeName":"String content", 
     "Value":"String content" 
    }] 
    } 
} 

のためにこの形式でJSONを要求し、これは私が実際に送信してるものです:

{ 
"SessionId":"17aaec11-be28-4536-b5df-d98fbda91e91", 
"Template":{ 
    "NumberOfSamples":1, 
    "CompanyId":1, 
    "SampleTypeId":9, 
    "Hmis":{ 
     "Health":"2", 
     "Flammability":"0", 
     "Reactivity":"0", 
     "Equipment":"E", 
    }, 
    "AttributeValues":[ 
     {"AttributeId":1,"AttributeName":"Item No.","Value":"MN0002NG"}, 
     {"AttributeId":2,"AttributeName":"Lot No.","Value":"C4526"} 
    ] 
} 
} 

私がいる問題がありますSampleTemplateDTOオブジェクトのAttributeValuesプロパティは常に無視されて終了します。上記のコードでは、nullになります。私がそれを空のList<AttributeValueDTO>にインスタンス化すると、空のリストになります。私は数時間、これに対して頭を叩いていました。

私はサービスを作成しようとしましたが、それはちょうどList<AttributeValueDTO>で、うまくいきます。私はAttributeValuesのラッパークラスを作成しようとしたが、それでもnullとして終了する。私は完全に困惑している。何か案は?

答えて

6

私は神の母ですが、私はただちに夢中になる5時間を浪費しました。 HMISセクションの末尾のカンマは、明らかにjson.netにその時点での解析を停止するように指示していました。

私はこのJSONを提出:

{ 
"SessionId":"17aaec11-be28-4536-b5df-d98fbda91e91", 
"Template":{ 
    "NumberOfSamples":1, 
    "CompanyId":1, 
    "SampleTypeId":9, 
    "Hmis":{ 
    "Health":"2", 
    "Flammability":"0", 
    "Reactivity":"0", 
    "Equipment":"E" 
    },  
    "AttributeValues":[ 
    {"AttributeId":1,"AttributeName":"Item No.","Value":"MN0002NG"}, 
    {"AttributeId":2,"AttributeName":"Lot No.","Value":"C4526"} 
    ]  
} 
} 

すべてが素晴らしい作品。

関連する問題