2

我正在使用 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; }
}

帮助页面要求为 CreateSamplesRequest 提供这种格式的 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"
    }]
  }
}

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

{
 "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>,它将是一个空列表。几个小时以来,我一直在努力解决这个问题。

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

4

1 回答 1

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"}
  ]     
 }
}

一切都很好。

于 2012-04-12T13:39:05.753 回答