簡體   English   中英

處理單個和多個Json數據

[英]Handling Single and Multiple Json data

我有如下的json字符串輸出,這是單個項目,也可以有多個項目。

[{"name":"someName","id":10,"state":"someState"}]

當我嘗試使用JsonConvert反序列化以上json字符串時, JsonConvert以下錯誤。

無法將當前JSON對象(例如{\\“ name \\”:\\“ value \\”})反序列化為類型'System.Collections.Generic.List`1,因為該類型需要JSON數組(例如[1,2,3] )以正確地反序列化。\\ r \\ n要解決此錯誤,可以將JSON更改為JSON數組(例如[1,2,3]),也可以更改反序列化的類型,使其成為普通的.NET類型(例如,不是原始類型)例如整數,而不是可以從JSON對象反序列化的集合類型(如數組或List)。

這是代碼塊,

string response = response.Content.ReadAsStringAsync().Result; // gives json string var result1 = JsonConvert.DeserializeObject<RootObject>(response); // this works var result2 = JsonConvert.DeserializeObject<List<RootObject>>(response); // gets error here

由於json字符串可以包含單個或多個項目,因此在反序列化時我無法使用RootObject。

RootObject類看起來像

public class RootObject
{
    [JsonProperty("name")]
    public string Name{ get; set; }

    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("state")]
    public string State { get; set; }
}

我曾嘗試在RootObject類的屬性級別和類級別使用custom JsonConverter ,並引用了此方法 ,但無法弄清楚如何在我的情況下使用相同的JsonConverter。

我不確定,為什么您要說代碼無法正常工作並引發錯誤。 我試圖重新產生該問題,但從我看來它似乎工作正常。

using System;
using System.Linq;
using System.Collections.Generic;
using Newtonsoft.Json;


    public class Program
    {
        public static void Main()
        {
            string json="[{\"name\":\"someName\",\"id\":10,\"state\":\"someState\"},{\"name\":\"someName\",\"id\":10,\"state\":\"someState\"}]";
            string json2="[{\"name\":\"someName\",\"id\":10,\"state\":\"someState\"}]";
            var result1 = JsonConvert.DeserializeObject<List<RootObject>>(json);
            var result2 = JsonConvert.DeserializeObject<List<RootObject>>(json2);
            Console.WriteLine("result1 count="+result1.Count());
            Console.WriteLine("result2 count="+result2.Count());

        }



    }
    public class RootObject
    {
        [JsonProperty("name")]
        public string Name{ get; set; }

        [JsonProperty("id")]
        public int Id { get; set; }

        [JsonProperty("state")]
        public string State { get; set; }
    }

點網小提琴在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM