我需要有关DataContract问题的帮助。我有一个Web服务,输出需要映射到C#对象的JSON。
从API返回的重要数据包含在JSON对象的“数据”键中,但这对我来说并不重要,我想丢弃它并将JSON反序列化到Item类中。 在其他地方使用了Item类,我真的希望在可能的情况下保持不变。
有没有办法可以将JSON中的数据反序列化为Item对象,但是将Item对象序列化保留为默认值?
目前,代码正在执行var item = await response.Content.ReadAsAsync<Item>();
以从API响应构建对象。
如果不能保持Item类不变,那么你可以建议最简单的修改来实现目标。
JSON:
{
"data": {
"id": "13c38fe9-6d9f-4a11-8eda-d071f2a99698",
"item_type": 100,
"item_name": "My Item Name"
}
}
C#对象:
[DataContract]
public class Item
{
[DataMember(Name = "id")]
public Guid Id { get; set; }
[DataMember(Name = "item_type")]
public int? ItemType { get; set; }
[DataMember(Name = "item_name")]
public string ItemName { get; set; }
}
任何帮助都会非常感激,因为C#通常不是我使用的语言。
答案 0 :(得分:0)
根据您的json,您的数据将采用类似
的类格式 [DataContract]
public class Wrapper
{
[DataMember(Name = "data")]
public Item item { get; set; }
}
[DataContract]
public class Item
{
[DataMember(Name = "id")]
public Guid Id { get; set; }
[DataMember(Name = "item_type")]
public int? ItemType { get; set; }
[DataMember(Name = "item_name")]
public string ItemName { get; set; }
}
您的回复采用包装器的格式,其中data是Item类型的属性。在合同中添加一个包装器,它应该可以正常工作。
您可以像这样运行它,以检查序列化字符串是否采用相同的格式。
Wrapper tempData = new Wrapper() { item = new Item() {
Id = new Guid("13c38fe9-6d9f-4a11-8eda-d071f2a99698"),
ItemName = "My Item Name",
ItemType = 100 } };
var serializedDta = JsonConvert.SerializeObject(tempData);