如何反序列化JSON对象类似于不同对象TYPES的数组?

时间:2018-04-04 07:53:02

标签: .net json json.net

我有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>>(...)

2 个答案:

答案 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>());