[英]json to c# deserialization with json.net
我知道有關json反序列化的無數帖子,但我已經關注了大部分帖子的答案,但他們還沒有解決。 我認為我的主要問題是我似乎無法理解Json實際上是如何構建結構的。
我從API中獲取了以下Json字符串:
{
"totalCount_str": "3",
"items": [
{
"standing": 10,
"corporation": {
"name": "borkedLabs",
"isNPC": false,
"href": "https://crest-tq.eveonline.com/corporations/98046548/",
"id_str": "98046548",
"logo": {
"32x32": {
"href": "http://imageserver.eveonline.com/Corporation/98046548_32.png"
},
"64x64": {
"href": "http://imageserver.eveonline.com/Corporation/98046548_64.png"
},
"128x128": {
"href": "http://imageserver.eveonline.com/Corporation/98046548_128.png"
},
"256x256": {
"href": "http://imageserver.eveonline.com/Corporation/98046548_256.png"
}
},
"id": 98046548
},
"href": "https://crest-tq.eveonline.com/characters/94512721/contacts/98046548/",
"contact": {
"id_str": "98046548",
"href": "https://crest-tq.eveonline.com/corporations/98046548/",
"name": "borkedLabs",
"id": 98046548
},
"contactType": "Corporation"
},
{
"standing": 10,
"character": {
"name": "xxxx yyyy",
"corporation": {
"name": "xxyshs",
"isNPC": false,
"href": "https://crest-tq.eveonline.com/corporations/98401169/",
"id_str": "98401169",
"logo": {
"32x32": {
"href": "http://imageserver.eveonline.com/Corporation/98401169_32.png"
},
"64x64": {
"href": "http://imageserver.eveonline.com/Corporation/98401169_64.png"
},
"128x128": {
"href": "http://imageserver.eveonline.com/Corporation/98401169_128.png"
},
"256x256": {
"href": "http://imageserver.eveonline.com/Corporation/98401169_256.png"
}
},
"id": 98401169
},
"isNPC": false,
"href": "https://crest-tq.eveonline.com/characters/95161569/",
"capsuleer": {
"href": "https://crest-tq.eveonline.com/characters/95161569/capsuleer/"
},
"portrait": {
"32x32": {
"href": "http://imageserver.eveonline.com/Character/95161569_32.jpg"
},
"64x64": {
"href": "http://imageserver.eveonline.com/Character/95161569_64.jpg"
},
"128x128": {
"href": "http://imageserver.eveonline.com/Character/95161569_128.jpg"
},
"256x256": {
"href": "http://imageserver.eveonline.com/Character/95161569_256.jpg"
}
},
"id": 95161569,
"id_str": "95161569"
},
"contact": {
"id_str": "95161569",
"href": "https://crest-tq.eveonline.com/characters/95161569/",
"name": "xxxx yyyy",
"id": 95161569
},
"href": "https://crest-tq.eveonline.com/characters/94512769/contacts/95161569/",
"contactType": "Character",
"watched": false,
"blocked": false
},
{
"standing": -10,
"alliance": {
"id_str": "99000003",
"href": "http://crest.regner.dev/alliances/99000003/",
"id": 99000003,
"name": "One One Corporation Alliance"
},
"href": "http://crest.regner.dev/characters/90000001/contacts/99000003/",
"contact": {
"id_str": "99000003",
"href": "http://crest.regner.dev/alliances/99000003/",
"name": "One One Corporation Alliance",
"id": 99000003
},
"contactType": "Alliance"
}
],
"pageCount": 1,
"pageCount_str": "1",
"totalCount": 3
}
請注意,items數組可以包含任意數量的“聯系人”。
通過使用http://json2csharp.com/我已將其轉換為C#中的類,如下所示:
public class Contacts
{
public string totalCount_str { get; set; }
public Item[] items { get; set; }
public int pageCount { get; set; }
public string pageCount_str { get; set; }
public int totalCount { get; set; }
}
public class Item
{
public int standing { get; set; }
public Alliance alliance { get; set; }
public string href { get; set; }
public Contact contact { get; set; }
public string contactType { get; set; }
public Character character { get; set; }
public bool watched { get; set; }
public bool blocked { get; set; }
}
public class Alliance
{
public string id_str { get; set; }
public string href { get; set; }
public int id { get; set; }
public string name { get; set; }
}
public class Contact
{
public string id_str { get; set; }
public string href { get; set; }
public string name { get; set; }
public int id { get; set; }
}
public class Character
{
public string name { get; set; }
public Corporation corporation { get; set; }
public bool isNPC { get; set; }
public string href { get; set; }
public Capsuleer capsuleer { get; set; }
public Portrait portrait { get; set; }
public int id { get; set; }
public string id_str { get; set; }
}
public class Corporation
{
public string name { get; set; }
public bool isNPC { get; set; }
public string href { get; set; }
public string id_str { get; set; }
public Logo logo { get; set; }
public int id { get; set; }
}
public class Logo
{
public _32X32 _32x32 { get; set; }
public _64X64 _64x64 { get; set; }
public _128X128 _128x128 { get; set; }
public _256X256 _256x256 { get; set; }
}
public class _32X32
{
public string href { get; set; }
}
public class _64X64
{
public string href { get; set; }
}
public class _128X128
{
public string href { get; set; }
}
public class _256X256
{
public string href { get; set; }
}
public class Capsuleer
{
public string href { get; set; }
}
public class Portrait
{
public _32X32 _32x32 { get; set; }
public _64X64 _64x64 { get; set; }
public _128X128 _128x128 { get; set; }
public _256X256 _256x256 { get; set; }
}
然后嘗試使用以下命令對其進行反序列化:
List<Contacts> tempList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Contacts>>(response.Content);
我感謝任何可以讓我走上正確軌道的幫助。 我在嘗試這種方式時遇到錯誤:
Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[ContactWatchlister.Models.Contacts]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'totalCount_str', line 1, position 18.
我目前陷入困境,因為我無法理解它為什么無法將“totalCount_str”理解為字符串。
我試圖在我的類中的所有屬性上使用[JsonProperty("attribute")]
來模擬它是正確的,但同樣的錯誤。
我很確定我做的事情相當簡單,錯誤,但我無法繞過它。 希望你能幫忙! :-)
如果response.Content
包含您描述的JSON字符串,我認為該語句應為:
var tempList = Newtonsoft.Json.JsonConvert.DeserializeObject<Contacts>(response.Content);
您的JSON在最外層“級別”中具有"totalCount_str"
, items
, pageCount
, pageCount_str
和totalCount
字段,因此它只能被反序列化為具有這些屬性的類(或具有與這些字段名對應的正確JsonAttribute
的屬性)。
您嘗試過的那個將使用以下JSON,其中最外層的實體是一個數組:
[ {
"totalCount_str": "3",
"items": [
{
"standing": 10,
"corporation": {
"name": "borkedLabs",
"isNPC": false,
"href": "https://crest-tq.eveonline.com/corporations/98046548/",
"id_str": "98046548",
"logo": {
"32x32": {
"href": "http://imageserver.eveonline.com/Corporation/98046548_32.png"
},
"64x64": {
"href": "http://imageserver.eveonline.com/Corporation/98046548_64.png"
},
"128x128": {
"href": "http://imageserver.eveonline.com/Corporation/98046548_128.png"
},
"256x256": {
"href": "http://imageserver.eveonline.com/Corporation/98046548_256.png"
}
},
"id": 98046548
},
"href": "https://crest-tq.eveonline.com/characters/94512721/contacts/98046548/",
"contact": {
"id_str": "98046548",
"href": "https://crest-tq.eveonline.com/corporations/98046548/",
"name": "borkedLabs",
"id": 98046548
},
"contactType": "Corporation"
},
{
"standing": 10,
"character": {
"name": "xxxx yyyy",
"corporation": {
"name": "xxyshs",
"isNPC": false,
"href": "https://crest-tq.eveonline.com/corporations/98401169/",
"id_str": "98401169",
"logo": {
"32x32": {
"href": "http://imageserver.eveonline.com/Corporation/98401169_32.png"
},
"64x64": {
"href": "http://imageserver.eveonline.com/Corporation/98401169_64.png"
},
"128x128": {
"href": "http://imageserver.eveonline.com/Corporation/98401169_128.png"
},
"256x256": {
"href": "http://imageserver.eveonline.com/Corporation/98401169_256.png"
}
},
"id": 98401169
},
"isNPC": false,
"href": "https://crest-tq.eveonline.com/characters/95161569/",
"capsuleer": {
"href": "https://crest-tq.eveonline.com/characters/95161569/capsuleer/"
},
"portrait": {
"32x32": {
"href": "http://imageserver.eveonline.com/Character/95161569_32.jpg"
},
"64x64": {
"href": "http://imageserver.eveonline.com/Character/95161569_64.jpg"
},
"128x128": {
"href": "http://imageserver.eveonline.com/Character/95161569_128.jpg"
},
"256x256": {
"href": "http://imageserver.eveonline.com/Character/95161569_256.jpg"
}
},
"id": 95161569,
"id_str": "95161569"
},
"contact": {
"id_str": "95161569",
"href": "https://crest-tq.eveonline.com/characters/95161569/",
"name": "xxxx yyyy",
"id": 95161569
},
"href": "https://crest-tq.eveonline.com/characters/94512769/contacts/95161569/",
"contactType": "Character",
"watched": false,
"blocked": false
},
{
"standing": -10,
"alliance": {
"id_str": "99000003",
"href": "http://crest.regner.dev/alliances/99000003/",
"id": 99000003,
"name": "One One Corporation Alliance"
},
"href": "http://crest.regner.dev/characters/90000001/contacts/99000003/",
"contact": {
"id_str": "99000003",
"href": "http://crest.regner.dev/alliances/99000003/",
"name": "One One Corporation Alliance",
"id": 99000003
},
"contactType": "Alliance"
}
],
"pageCount": 1,
"pageCount_str": "1",
"totalCount": 3 } ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.