我有json:
{
"_embedded": {
"users": {
"1688416": {
"id": 1688416,
"name": "test"
},
"1688395": {
"id": 1688395,
"name": "test",
},
"1625614": {
"id": 1625614,
"name": "test"
}
}
}
}
我应该通过Newtonsoft.JSON库对它进行反序列化,但我无法理解如何? “用户”对象中的对象可以更改,“用户” - 不是数组。
我可以只使用JsonConvert.DeserializeObject(myobject)并按索引获取所有字段,但这是愚蠢的,我想将此json反序列化为普通对象。怎么样?
更新:我使用的代码
T is User
public class Response<T>
{
[JsonProperty("_embedded", NullValueHandling = NullValueHandling.Ignore)]
public EmbeddedContent<T> EmbeddedContent { get; set; }
}
public class EmbeddedContent<T>
{
[JsonPropertyNameBasedOnItemClass]
public List<T> Items { get; set; }
}
public class User{
public int id{get;set;}
public string name {get;set;}
}
JsonPropertyNameBasedOnItemClass - work like JsonProperty("users")
并尝试反序列化:
JsonConvert.DeserializeObject<Response<User>>(...)
答案 0 :(得分:1)
您可以使用词典而不是列表
例如:
public class EmbeddedContent<T>
{
[JsonProperty("users")]
public Dictionary<string, T> Items { get; set; }
}
然后按ID
引用用户var response = JsonConvert.DeserializeObject<Response<User>>(json);
var user = response.EmbeddedContent.Items["1688416"];
答案 1 :(得分:0)
最后,我找到了这个解决方案:
var p = JObject.Parse(rawJson).SelectToken("_embedded.users").Children().Select(t => t.First.ToObject<User>());