反序列化 JSON 到 C# 对象不分配值

Deserialize JSON to C# object does not assign the values

我有以下 Contacts JSON 数据 -

{
    "currentPage": 1,
    "totalPages": 1,
    "elementsOnPage": 0,
    "totalElements": 1,
    "contacts": [
        {
            "id": "9bf83fab-a485-495c-8e1f-b32c8fe9b9c6",
            "version": 1,
            "type": 2
        }
    ]
}

和下面的 C# Contacts class 映射到 JSON -

public class Contacts
    {
       
        public System.Guid id { get; set; }

        public long version { get; set; }
      
        public ContactType type { get; set; }
    }

为了Deserialize JSON,我写了下面的代码-

Contacts contacts = JsonConvert.DeserializeObject<Contacts>(ContactsJson);

json 只不过是上面 C#.

中给出的 Contacts JSON

现在,当我检查 contacts object 所有值都是 null 时,没有值分配给 object properties。我错过了什么吗?请帮助或建议。

注意 - 我不想获取 currentPagetotalPageselementsOnPagetotalElements 的值

TIA

你可以试试这个:

    JObject jObject = JObject.Parse(json);

    var contacts = jObject.SelectToken("contacts").First.ToObject<Contacts>();

假设您的 class 看起来像这样:

    public class Contacts
    {

        public Guid id { get; set; }

        public long version { get; set; }

        public int type { get; set; }
    }

当你这样做时:

Contacts contacts = JsonConvert.DeserializeObject<Contacts>(ContactsJson);

DeserializeObject 期望 json 看起来像联系人 class 的实例。如果您对那些东西不感兴趣也没关系,class 的结构必须与 json 相匹配。 json 是一个包含 许多 联系人的对象。所以需要匹配:

试试这个:

public class Contact
{
    public System.Guid id { get; set; }
    public long version { get; set; }
    public ContactType type { get; set; }
}

public class ContactCollection
{
    public Contact[] contacts{ get; set; }
}

然后:

var contacts = JsonConvert.DeserializeObject<ContactCollection>(ContactsJson);

你可以像这样声明你的 类 它会反序列化。

public class Contact
{
    public Guid id { get; set; } 
    public int version { get; set; } 
    public int type { get; set; } 
}

public class Contacts
{
    public int totalElements { get; set; } 
    public List<Contact> contacts { get; set; } 
}

由于您使用的是 Newtonsoft JSON,请使用此

Contacts contacts = JsonConvert.DeserializeObject<Contacts>(ContactsJson);

您可以使用此代码:

var data = (JObject)JsonConvert.DeserializeObject(json);
var contacts = data["contacts"].ToObject<List<Contacts>>();

联系人class

public class Contacts
{
    public System.Guid id { get; set; }
    public long version { get; set; }
    public int type { get; set; }
}