[英]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.