[英]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
類) RootObject
到IndexedVideoReponseVM
類中,但這不是正確的方法。
請刪除包裝類IndexedVideoReponseVM
(保留其中的所有內容),然后反序列化JSON,如下所示: JsonConvert.DeserializeObject<RootObject>(responseData)
。
當然,一旦RootObject
,您可以給RootObject
一個更合適的名稱(json2sharp無法做到這一點,因為它沒有有關外部對象的信息)。
您應該像這樣反序列化:
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.