C# DataContract 自定义反序列化
C# DataContract custom deserialisation
我需要有关 DataContract 问题的帮助。我有一个输出 JSON 需要映射到 C# 对象的 Web 服务。
从 API 返回的重要数据包装在 JSON 对象的 "data" 键中,但这对我来说并不重要,我想丢弃它并拥有JSON 反序列化为项目 class。 项目class在其他地方使用,如果可能我真的很想保持不变。
有没有办法更改 JSON 中的数据反序列化到 Item 对象的方式,但保留 Item 对象序列化为默认值?
当前代码正在执行 var item = await response.Content.ReadAsAsync<Item>();
从 API 响应构建对象。
如果无法保持项目 class 不变,那么您能否建议最简单的修改来实现目标。
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,您的数据采用 class 格式,如下所示
[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; }
}
您的响应采用包装器格式,其中数据是 属性 类型的 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);
我需要有关 DataContract 问题的帮助。我有一个输出 JSON 需要映射到 C# 对象的 Web 服务。
从 API 返回的重要数据包装在 JSON 对象的 "data" 键中,但这对我来说并不重要,我想丢弃它并拥有JSON 反序列化为项目 class。 项目class在其他地方使用,如果可能我真的很想保持不变。
有没有办法更改 JSON 中的数据反序列化到 Item 对象的方式,但保留 Item 对象序列化为默认值?
当前代码正在执行 var item = await response.Content.ReadAsAsync<Item>();
从 API 响应构建对象。
如果无法保持项目 class 不变,那么您能否建议最简单的修改来实现目标。
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,您的数据采用 class 格式,如下所示
[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; }
}
您的响应采用包装器格式,其中数据是 属性 类型的 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);