2012-04-12 111 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; } 
} 

帮助页面请求JSON以这种形式为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" 
    }] 
    } 
} 

这就是我实际发送:

{ 
"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属性总是被忽略。使用上面的代码,它将是空的。如果我将其设为空List<AttributeValueDTO>它将是一个空列表。几个小时后,我一直对此感到震惊。

我试过创建一个服务,只需要一个List<AttributeValueDTO>,它工作正常。我试着为AttributeValues创建一个包装类,它仍然以null结束。我完全被难住了。有任何想法吗?

回答

6

上帝的母亲,我只是在一个失败的COMMA上浪费了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"} 
    ]  
} 
} 

一切都很正常。

相关问题