Ich verwende json.net, um meine Json-Deserialisierung in einem von IIS gehosteten Restful-Dienst durchzuführen.Json.net kann eine Liste komplexer Typen nicht deserialisieren
Zuerst, hier sind die Objekte, mit denen ich versuche zu arbeiten.
[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; }
}
Die Hilfeseite fragt nach json in diesem Format für die 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"
}]
}
}
Und das ist, was ich schicke tatsächlich:
{
"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"}
]
}
}
Das Problem, das ich habe, ist, dass die AttributeValues-Eigenschaft des SampleTemplateDTO-Objekts immer ignoriert wird. Mit dem obigen Code wird es null sein. Wenn ich es auf eine leere List<AttributeValueDTO>
installiere, wird es eine leere Liste sein. Ich habe mir schon seit ein paar Stunden den Kopf dagegen geschlagen.
Ich habe versucht, einen Dienst zu erstellen, der nur eine List<AttributeValueDTO>
dauert und es funktioniert gut. Ich habe versucht, eine Wrapper-Klasse für die AttributeValues zu erstellen und es endet immer noch als null. Ich bin völlig ratlos. Irgendwelche Ideen?