[英]How to convert dynamic JSON to C# object
我正在嘗試將 JSON object 以下轉換為 C# ZA2F2ED4F8EBC2CBB4C21A29DC40AB61Z。 我可以獲得等效於filter的 C# ,但不適用於sort 。
在過濾器JSON object 的情況下; 或者,openCondition等是static。 因此,我可以生成 C# class。
但是對於排序JSON object; accountName和tradeDate不是 static。 這些字段完全按照用戶要求。 它們可能會隨着某些其他輸入的某些其他字段而更改。 因此,我不明白如何為這種類型的 JSON ZA8CFDE6331BD49EB2AC96F89111 誰能建議我如何做到這一點?
{
"filter": [
{
"andOr": "",
"openCondition": false,
"columnName": "accountName",
"operator": "eq",
"value": "KATHERINE",
"closeCondition": false
}
],
"sort": {
"accountName": "asc",
"tradeDate": "desc"
},
"pageIndex": 1,
"pageSize": 75
}
我嘗試創建如下所示的SortCriteria
class。 但是,它與 JSON 排序 object 不匹配。
public class SortCriteria
{
public string ColumnName { get; set; }
public string SortOrder { get; set; }
}
誰能建議我如何解決這個問題。
對於屬性不固定的情況,例如在Sort
中,您可以使用Dictionary
(使用JsonExtensionDataAttribute )。 例如,
public class Filter
{
public string andOr { get; set; }
public bool openCondition { get; set; }
public string columnName { get; set; }
public string @operator { get; set; }
public string value { get; set; }
public bool closeCondition { get; set; }
}
public class Sort
{
[JsonExtensionData]
public Dictionary<string,object> RandomKeyValuePair {get;set;}
}
public class RootObject
{
public List<Filter> filter { get; set; }
public Sort sort { get; set; }
public int pageIndex { get; set; }
public int pageSize { get; set; }
}
樣品 Output
如果您的 json 屬性不固定並且它可能會隨着時間的推移而改變,那么您可以使用dynamic
代替創建單獨的 class 。
喜歡,
string jsonString = @"{
sort: {
accountName: 'asc',
tradeDate: 'desc'
}
}";
JObject obj = JObject.Parse(jsonString);
Console.WriteLine($"AccountNumber: {obj["sort"]["accountName"]}");
使用 Json 路徑,
Console.WriteLine($"AccountNumber: {obj.SelectToken("$.sort.accountName")}");
您可以將任何 JSON object 反序列化為Dictionary<string,object>
或者如果您知道值類型,則可以使用該值類型而不是object
。
在這種情況下,排序值只會是"asc"
或"desc"
,因此我們可以使用string
或(更好) enum
public enum SortDirection
{
Asc,
Desc,
}
class 看起來像
public class Data
{
...
[JsonProperty( "sort" )]
public Dictionary<string,SortDirection> Sort { get; set; }
...
}
一個最小的例子
var json = "{\"sort\":{\"accountName\":\"asc\",\"tradeDate\":\"desc\"}}";
var obj = JsonConvert.DeserializeObject<Data>(json);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.