c#数据契约自定义反序列化
本文关键字:反序列化 自定义 契约 数据 | 更新日期: 2023-09-27 18:04:49
我需要数据合约问题的帮助。我有一个web服务,输出JSON,需要映射到一个c#对象。
从API返回的重要数据包装在JSON对象的"data"键中,但这对我来说并不重要,我想放弃它,并将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#通常不是我使用的语言。
根据你的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);