[英]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 == true
將resultObject
反序列化為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.