反序列化 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
。我错过了什么吗?请帮助或建议。
注意 - 我不想获取 currentPage
、totalPages
、elementsOnPage
和 totalElements
的值
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; }
}
我有以下 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
。我错过了什么吗?请帮助或建议。
注意 - 我不想获取 currentPage
、totalPages
、elementsOnPage
和 totalElements
的值
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; }
}