簡體   English   中英

反序列化Big JSON數組並從中提取數據

[英]Deserialize Big JSON Array and extracting data from it

目前,我正在使用Azure媒體索引服務(從視頻等中提取文本)的項目中工作。 索引后,我得到的響應結果為json。 通過這個網站( http://json2csharp.com/ ),我為我的項目創建了視圖模型。 我想從此json提取某些數據。 現在的問題是,當我嘗試解析json時,系統陷入了反序列化行。

基本上我試圖像下面這樣反序列化,

IList<IndexedVideoReponseVM> modelObj = JsonConvert.DeserializeObject<IList<IndexedVideoReponseVM>>(responseData);

我已經嘗試了stackoverflow中幾乎所有可用的代碼段,例如javascript序列化器,JSON.net等。我想可能是因為json的大小。 我已經將示例json上傳到了這里( http://myjson.com/1g74kx ),這是我的VM( http://textuploader.com/d6218 )。 有人可以分析一下,讓我知道如何解決嗎?

謝謝。

鏈接上的JSON不是數組,而是單個元素。 最重要的是,將所有生成的類(包括RootObject類) RootObjectIndexedVideoReponseVM類中,但這不是正確的方法。

請刪除包裝類IndexedVideoReponseVM (保留其中的所有內容),然后反序列化JSON,如下所示: JsonConvert.DeserializeObject<RootObject>(responseData)

當然,一旦RootObject ,您可以給RootObject一個更合適的名稱(json2sharp無法做到這一點,因為它沒有有關外部對象的信息)。

我認為這與您的JSON被雙引號有關。 不久前 ,我遇到了類似的問題,我嘗試通過轉義符處理后反序列化,並且對我有用 :)如果可以,您應該先轉義接收到的JSON或替換雙引號。

您應該像這樣反序列化:

var obj = JsonConvert.DeserializeObject<IndexedVideoReponseVM.RootObject>(str);

該代碼在435毫秒(不到1秒)內執行

完整的代碼示例:

using System;
using System.Diagnostics;
using System.Threading;
using Newtonsoft.Json;

namespace ConsoleApp12
{
    class Program
    {
        static void Main(string[] args)
        {


            var str = @"{
  ""accountId"": ""496c-aed1-ab750d882fa5"",
  ""id"": ""acd8121234"",

//i've cut most part of text couse of stackoverflow.com limitation on 30000 symbols. Code was tested with full json

  ""social"": {
    ""likedByUser"": false,
    ""likes"": 0,
    ""views"": 0
  }
}";

            var sw = Stopwatch.StartNew();
            var obj = JsonConvert.DeserializeObject<IndexedVideoReponseVM.RootObject>(str);
            sw.Stop();
            Console.WriteLine($"Deserialized at {sw.ElapsedMilliseconds} ms ({sw.ElapsedTicks} tiks)");
        }
    }
}

暫無
暫無

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

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