2

json.net を使用して、IIS がホストする安らかなサービスで 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 プロパティが常に無視されることです。上記のコードでは、null になります。空にインスタンス化するList<AttributeValueDTO>と、空のリストになります。私はこれに対して数時間頭を悩ませてきました。

を取るだけのサービスを作成しようとしましたが、List<AttributeValueDTO>正常に動作します。AttributeValues のラッパー クラスを作成しようとしましたが、それでも null になります。私は完全に困惑しています。何か案は?

4

1 に答える 1