簡體   English   中英

我如何從API(數組數組)反序列化此JSON字符串

[英]How do I deserialize this JSON string from API (array of arrays)

想象一下, serialized變量來自API,而我沒有RsTarget類作為API的客戶端。

我當時想我可以將其反序列化為動態對象,然后以這種方式訪問​​屬性。 但是,在了解如何執行此操作時會遇到一些麻煩。 它是一個數組數組。 我發現了如何反序列化頂級數組,但是元素在JSON字符串中。

假設我要訪問Target3屬性。

我看錯了嗎? 我應該在客戶端上復制RsTarget嗎? 如果API更改了RsTarget怎么辦?

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

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<List<RsTarget>> toReturn = new List<List<RsTarget>>();

            List<RsTarget> list = new List<RsTarget>();
            list.Add(new RsTarget() { Id = 1, MyProperty = "Target1" });

            List<RsTarget> list2 = new List<RsTarget>();
            list2.Add(new RsTarget() { Id = 2, MyProperty = "Target2" });
            list2.Add(new RsTarget() { Id = 3, MyProperty = "Target3" });

            toReturn.Add(list);
            toReturn.Add(list2);

            var serialized = JsonConvert.SerializeObject(toReturn);

            var deserialized = JsonConvert.DeserializeObject<JArray>(serialized).ToObject<List<List<JObject>>>();
        }
    }

    class RsTarget
    {
        public int Id { get; set; }
        public string MyProperty { get; set; }
    }
}

當您獲得JArray時應該不會有什么問題

var arr = JsonConvert.DeserializeObject<JArray>(serialized);
for(var i = 0;i < arr.Count; i++)
{
    JArray arr2 = arr[i] as JArray;

    for(var j = 0;j < arr2.Count; j++)
    {
        JObject obj = arr2[j] as JObject;
        // using dynamic 
        dynamic dobj = obj;
        var Id = (int)doObj.Id;
       // using strong type
       var strongObj = obj.ToObject<MyClientClass>()
    }
}

我應該在客戶端上復制RsTarget嗎? 如果API更改了RsTarget怎么辦

在客戶端上復制RsTarget的最佳方法。 對於第二個問題:即使您使用JObject ,當api JObject屬性名稱時,它總是會中斷您的應用程序,但是如果僅添加屬性,則它們都不會受到影響。

暫無
暫無

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

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