亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將包含可變內容的字符串轉換為 JSON

如何將包含可變內容的字符串轉換為 JSON

C#
慕絲7291255 2021-11-28 16:08:57
我已經在使用Newtonesoft Package的JsonSerializer將字符串轉換為 JSON 格式,但它無法將此字符串轉換為 JSON。{    "isSuccess": true,    "elapsed": 54,    "results": {        "131351990802396920": "updated",        "21034623651844830": "updated",        "112201011402879160": "updated"    },    "errors": {    "105933291602523100": "Error",    "106574790922078090": "Error",    "114439941021395940": "Error",    "123574814601457710": "Error"    }}我試圖將字符串轉換為的類結構如下:public class UpdateResultSt{    public bool isSuccess { get; set; }    public int elapsed { get; set; }    public List<SuccessfulUpdateResult> results = new List<SuccessfulUpdateResult>();    public List<FailedUpdateResult> errors = new List<FailedUpdateResult>();}public class SuccessfulUpdateResult{    public string id { get; set; }    public string text { get; set; }}public class FailedUpdateResult{    public string id { get; set; }    public string text { get; set; }}這是我的一些負責轉換的代碼:    JsonSerializer json_serializer;    json_serializer = new JsonSerializer    {            NullValueHandling = NullValueHandling.Ignore    };    JsonReader jsonReader = new JsonTextReader(new StringReader(responseFromServer));    UpdateResultSt routes_list = json_serializer.Deserialize<UpdateResultSt>(jsonReader);如您所見,the Results和the Errors范圍都有可變內容。還有一些其他問題也有同樣的問題,但沒有人能解決我的問題。錯誤信息是:'無法將當前 JSON 對象(例如 {"name":"value"})反序列化為類型 'System.Collections.Generic.List`1[ConceptTaggerWinApp.UpdateResultSt]' 因為該類型需要一個 JSON 數組(例如 [1,2 ,3]) 以正確反序列化。要修復此錯誤,請將 JSON 更改為 JSON 數組(例如 [1,2,3])或更改反序列化類型,使其成為正常的 .NET 類型(例如,不是像整數這樣的原始類型,而不是像這樣的集合類型)可以從 JSON 對象反序列化的數組或列表)。還可以將 JsonObjectAttribute 添加到類型以強制它從 JSON 對象反序列化。路徑“isSuccess”,第 1 行,位置 13。如何更改我的類結構以成功將此字符串轉換為 JSON?
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

由于您無法更改 Json 的格式,我想說以下類應該按預期工作:


public class UpdateResultSt

{

    public bool isSuccess { get; set; }

    public int elapsed { get; set; }


    public Dictionary<string,string> results { get; set; }

    public Dictionary<string,string> errors { get; set; }

}

然后你可以這樣寫:


routes_list.results["131351990802396920"]

獲取文本"updated"。


或者routes_list.results.Keys得到的名單id中的S results。


請參閱反序列化字典。


查看完整回答
反對 回復 2021-11-28
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

SuccessfulUpdateResult 和 FailedUpdateResult 的格式不正確。


應該是這樣的:


{

    "isSuccess": true,

    "elapsed": 54,

    "results": [

        0: { "id" : "131351990802396920", "text" : "updated"},

        1: { "id" :"21034623651844830", "text" : "updated"},

        2: { "id" :"112201011402879160", "text" : "updated"}

    ],

    "errors": {

     // same than SuccessfulUpdateResult 

     ...

    }

}


查看完整回答
反對 回復 2021-11-28
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

您的 json 字符串不代表您嘗試將其反序列化的對象圖。你的外部類應該有一個數組或結果和一個數組或類似于這樣的錯誤:


{

"isSuccess": true,

"elapsed": 54,

"results": [

    {"id":"131351990802396920", "test":"updated"},

    {"id":"21034623651844830","text":"updated"},

    {"id":"112201011402879160", "text":"updated"}

],

"errors": [

{"id":"105933291602523100","test":"Error"},

{"id":"106574790922078090","text":"Error"},

{"id":"114439941021395940","text":"Error"},

{"id":"123574814601457710","text":"Error"}

]

}


您擁有的是一個結果類,其中包含三個名為 131351990802396920、21034623651844830、112201011402879160 的字段,因此它無法將其映射到您的對象。


查看完整回答
反對 回復 2021-11-28
  • 3 回答
  • 0 關注
  • 223 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號