使用 RestSharp 反序列化部分 json 内容
Deserializing partial json content with RestSharp
我正在使用 RestSharp
发出请求并将响应反序列化为 NewtonsoftJsonSerializer
的 C# 模型。我 运行 遇到了 2 个相似的 json 字符串的情况。
第一个:
{
"updated": "",
"data":{
"categories":[...],
"products": [...]
}
}
第二个:
{
"updated": "",
"categories":[...],
"products": [...]
}
为了反序列化第一个,我使用了以下 C# 模型:
public class Root
{
[JsonProperty("updated")] public string Updated{ get; set; }
[JsonProperty("data")] public Data Items{ get; set; }
}
public class Data
{
[JsonProperty("categories")] public List<Category> Categories { get; set; }
[JsonProperty("products")] public List<Dish> Products { get; set; }
}
public class Category{...}
public class Dish{...}
我现在可以使用 Data
class 反序列化第二个 json 字符串。但我想使用一种模型来反序列化它们。并且先反序列化 json 成 Data
class 显然 returns null。基本上我只需要 categories
和 products
列表。
我应该在我的模型中改变什么来实现它?
有什么属性可以提供帮助吗?
如果你像这样定义 class 并将 json 响应反序列化到这个 class,你可以有一个 class 但有些字段对于每个不同的响应。
public class Data
{
[JsonProperty("updated")] public string Updated{ get; set; }
[JsonProperty("categories")] public List<Category> Categories { get; set; }
[JsonProperty("products")] public List<Dish> Products { get; set; }
[JsonProperty("data")] public Data Items{ get; set; }
}
如果你不想像上面那样做,我认为你应该创建一个自定义反序列化器,如下所述:
How to implement custom JsonConverter in JSON.NET?
试试这个
var jsonParsed = JObject.Parse(json);
Root data;
if (jsonParsed["data"] != null)
data = jsonParsed.ToObject<Root>();
else
{
data = new Root
{
Updated = (string)jsonParsed["updated"],
Items = new Data
{
Categories = jsonParsed["categories"].ToObject<List<Category>>(),
Products = jsonParsed["products"].ToObject<List<Dish>>()
}
};
}
我正在使用 RestSharp
发出请求并将响应反序列化为 NewtonsoftJsonSerializer
的 C# 模型。我 运行 遇到了 2 个相似的 json 字符串的情况。
第一个:
{
"updated": "",
"data":{
"categories":[...],
"products": [...]
}
}
第二个:
{
"updated": "",
"categories":[...],
"products": [...]
}
为了反序列化第一个,我使用了以下 C# 模型:
public class Root
{
[JsonProperty("updated")] public string Updated{ get; set; }
[JsonProperty("data")] public Data Items{ get; set; }
}
public class Data
{
[JsonProperty("categories")] public List<Category> Categories { get; set; }
[JsonProperty("products")] public List<Dish> Products { get; set; }
}
public class Category{...}
public class Dish{...}
我现在可以使用 Data
class 反序列化第二个 json 字符串。但我想使用一种模型来反序列化它们。并且先反序列化 json 成 Data
class 显然 returns null。基本上我只需要 categories
和 products
列表。
我应该在我的模型中改变什么来实现它? 有什么属性可以提供帮助吗?
如果你像这样定义 class 并将 json 响应反序列化到这个 class,你可以有一个 class 但有些字段对于每个不同的响应。
public class Data
{
[JsonProperty("updated")] public string Updated{ get; set; }
[JsonProperty("categories")] public List<Category> Categories { get; set; }
[JsonProperty("products")] public List<Dish> Products { get; set; }
[JsonProperty("data")] public Data Items{ get; set; }
}
如果你不想像上面那样做,我认为你应该创建一个自定义反序列化器,如下所述: How to implement custom JsonConverter in JSON.NET?
试试这个
var jsonParsed = JObject.Parse(json);
Root data;
if (jsonParsed["data"] != null)
data = jsonParsed.ToObject<Root>();
else
{
data = new Root
{
Updated = (string)jsonParsed["updated"],
Items = new Data
{
Categories = jsonParsed["categories"].ToObject<List<Category>>(),
Products = jsonParsed["products"].ToObject<List<Dish>>()
}
};
}