Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Json.NET反序列化属性,而不反序列化其上的父对象_C#_Json.net - Fatal编程技术网

C# Json.NET反序列化属性,而不反序列化其上的父对象

C# Json.NET反序列化属性,而不反序列化其上的父对象,c#,json.net,C#,Json.net,我正在尝试使用以下JSON: { “标题”:“字符串”, “说明”:“字符串”, “日期”:“2021-04-19T01:05:38.000Z”, “图像”:“url”, “图像”:[ “url1”, “url2” ], “属性”:{ “电话品牌”:“x”, “电话运营商”:“y”, “forsaleby”:“z”, “价格”:12345, “地点”:“地点”, “类型”:“提供” }, “url”:“列表的url” } 并将其转换为C#对象: 公共类列表{ [JsonProperty(“所有

我正在尝试使用以下JSON:

{
“标题”:“字符串”,
“说明”:“字符串”,
“日期”:“2021-04-19T01:05:38.000Z”,
“图像”:“url”,
“图像”:[
“url1”,
“url2”
],
“属性”:{
“电话品牌”:“x”,
“电话运营商”:“y”,
“forsaleby”:“z”,
“价格”:12345,
“地点”:“地点”,
“类型”:“提供”
},
“url”:“列表的url”
}
并将其转换为C#对象:

公共类列表{
[JsonProperty(“所有权”)]
公共字符串标题{get;set;}
[JsonProperty(“描述”)]
公共字符串说明{get;set;}
[JsonProperty(“日期”)]
公共日期时间?日期{get;set;}
[JsonProperty(“图像”)]
公共字符串图像{get;set;}
[JsonProperty(“图像”)]
公共字符串[]图像{get;set;}
[JsonProperty(“url”)]
公共字符串Url{get;set;}
[JsonProperty(“价格”)]
公共十进制价格{get;set;}
[JsonProperty(“locationId”)]
public int LocationId{get;set;}
[JsonProperty(“类别”)]
public int CategoryId{get;set;}
[JsonProperty(“sortByName”)]
公共字符串SortByName{get;set;}
[JsonProperty(“q”)]
公共字符串Q{get;set;}
[JsonProperty(“位置”)]
公共字符串位置{get;set;}
[JsonProperty(“类型”)]
公共字符串类型{get;set;}
[JsonProperty(“forsaleby”)]
SALEBY{get;set;}的公共字符串
[JsonProperty(“履行”)]
公共字符串实现{get;set;}
[JsonProperty(“付款”)]
公共字符串支付{get;set;}
[JsonProperty(“电话品牌”)]
公共字符串?PhoneBrand{get;set;}
[JsonProperty(“电话运营商”)]
公共字符串?PhoneCarrier{get;set;}
}

我的问题是,我试图反序列化属性,如
price
phonebrand
,但这些属性位于JSON中的一个对象下。因此,当我尝试像这样反序列化它们时,这些属性找不到,并且被设置为null。我如何反序列化这些属性而不改变我的C#类以包含
属性
类?我之所以想这样做,是因为我认为与我正在使用的JSON相比,它是一种更干净/更好的设计。

我建议两种方法,它们非常明确,便于下一个查看代码的开发人员遵循

两类 创建用于反序列化的中间dto类,然后从该中间对象创建业务逻辑对象

var withAttributes = Deserialise<ListingDto>();

var flatObject = new Listing(withAttributes);

我会选择第二个选项。我认为有一种方法可以使用JsonProperty或类似的工具来实现,但效果很好。泰!
public class Listing
{
  public AttributesDto Attributes {get; set}

  ... 

  public string Url => Attributes.Url; // Maybe '?.Url'
}