簡體   English   中英

如何將 Json Object 序列化/反序列化到 C# ZA2F2ED4F8DCEBC2CBB4DC21A2

[英]How to serilize/deserilize Json Object to C# class

我有兩個具有“resultObject”屬性的 json 響應。 其中一個返回了 object,另一個返回了字符串/布爾值。

我有一個使用 JSON 的 C# object。

public class UseInboxResult
{      

    public string version { get; set; }
    public bool resultStatus { get; set; }
    public int resultCode { get; set; }
    public string resultMessage { get; set; }
    public ResultObject resultObject { get; set; }
}

public class ResultObject
{        
    public string access_token { get; set; }
    public int expires_in { get; set; }
    public string token_type { get; set; }


    public int displayCount { get; set; }
    public int totalCount { get; set; }

    public List<Items> items { get; set; }
}

JSON 對象具有不同類型的 resultObject 屬性

    //First
{
  "version": "1.0.0",
  "resultStatus": true,
  "resultCode": 200,
  "resultMessage": "Your operation has been completed successfully.",
  "resultObject": {
    "displayCount": 1,
    "totalCount": 1,
    "items": [
      {
        "id": "5db72eec92b565000100a0aa",
        "createTime": "2019-10-28T18:09:48.924Z",
        "updateTime": "2019-12-20T18:10:41.451Z",
        "displayName": "John Doe",
        "email": "john.doe@example.com",
        "activation": true,
        "notifyDedicatedIps": null
      }
    ]
  }
}

//Second

{
  "version": "1.0.0",
  "resultStatus": false,
  "resultCode": 200,
  "resultMessage": "OK",
  "resultObject": "5e0491bdaf6d250001834b75"
}

如何為此屬性綁定 c# class。

您可以將ResultObject替換為object然后檢查resultStatus如果resultStatus == trueresultObject反序列化為ResultObject 否則將resultObject反序列化為string

public class UseInboxResult
{      
    public string version { get; set; }
    public bool resultStatus { get; set; }
    public int resultCode { get; set; }
    public string resultMessage { get; set; }
    public object resultObject { get; set; }//<--NOTE THIS
}

var data = JsonConvert.DeserializeObject<UseInboxResult>(json);
//var data = System.Text.Json.JsonSerializer.Deserialize<UseInboxResult>(json); .Net Core 3
if (data.resultStatus == true)
{
      ResultObject result = JsonConvert.DeserializeObject<ResultObject>(data.resultObject.ToString());
}
else
{
    string result = JsonConvert.DeserializeObject<ResultObject>(data.resultObject.ToString());
}

您可以使用泛型將它們拆分為單獨的部分。

public class Response<T>
where T : class
{      

    public string version { get; set; }
    public bool resultStatus { get; set; }
    public int resultCode { get; set; }
    public T resultMessage { get; set; }
}

public class ResultObject
{        
    // Your same ResultObject.
}

您現在可以根據您調用的內容反序列化為Response<ResultObject>Response<string>

暫無
暫無

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

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