Json.net无法反序列化复杂类型列表

tom*_*ich 2 wcf json.net wcf-rest

我正在使用json.net在IIS托管的restful服务中执行处理我的json反序列化.

首先,这是我正在尝试使用的对象.

[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; }
}
Run Code Online (Sandbox Code Playgroud)

帮助页面以CreateZamplesRequest的格式请求json

{
 "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"
    }]
  }
}
Run Code Online (Sandbox Code Playgroud)

这就是我实际发送的内容:

{
 "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"}
    ]
 }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是SampleTemplateDTO对象的AttributeValues属性总是被忽略.使用上面的代码,它将为null.如果我将它实例化为空,List<AttributeValueDTO>那么它将是一个空列表.几个小时以来,我一直在抨击我.

我已经尝试创建一个只需要一个服务,List<AttributeValueDTO>它工作正常.我已经尝试为AttributeValues创建一个包装类,它仍然最终为null.我完全难过了.有任何想法吗?

tom*_*ich 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"}
  ]     
 }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好.