gpt4 book ai didi

C# 使用通用对象操作 JSON

转载 作者:行者123 更新时间:2023-11-30 15:56:58 44 4
gpt4 key购买 nike

我的 JSON 大部分如下所示:

{
"odata.metadata":"XXX",
"value":[
{
"PartitionKey":"0000000001-0000000001",
"RowKey":"8a6f7335-4cc7-4aaa-9b48-f719a1f56844",
"Timestamp":"2016-11-07T18:19:59.3147580Z",
"DistributionNumber":1,
"Name":"General"
},
{
"PartitionKey":"0000000001-0000000001",
"Id":"bce10165-3a3e-4166-9907-2ed02c0f83fb",
"Timestamp":"2016-11-07T18:20:17.1260274Z",
"DistributionNumber":1,
"Designation":"Secondary"
}
]
}

我说“大部分”是因为 JSON 可能会有所不同,但以下内容除外:

  • 总会有一个 odata.metadata 节点离开根。
  • 总会有一个 value 节点离开根,这将是一个数组。
  • value 数组可以有不同数量的项目,每个项目都有不同的名称-值对除了一个永远是PartitionKey .

我需要做的是将 JSON 读入内存并去除所有没有 PartitionKey = "0000000001-0000000001"的值项。

到目前为止,我有以下代码:

var jsonObj = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(jsonString);
var value = (ArrayList)jsonObj["value"];
foreach (var item in value)
{
if (item["PartitionKey"] != "0000000001-0000000001")
{
value.Remove(item.Key);
}
}

value 转换为 ArrayList 似乎是我能够访问其数据的唯一方法,但随后我无法访问 PartitionKey 属性。

由于每个 value 项目中的数据可能不同,我该如何做我想做的事 - 测试每个项目的值并有条件地删除它们 - 以通用方式?

最佳答案

我认为最简单的方法是使用 Dictionary<string, string>对于值属性。例如:

public class DataObject
{
[JsonProperty("odata.metadata")]
public string ODataMetadata { get; set; }

public IEnumerable<Dictionary<string, string>> Value { get; set; }
}

现在使用 JSON.Net:

var data = JsonConvert.DeserializeObject<DataObject>(json);

然后过滤掉不需要的值:

data.Value = data.Value
.Where(v => v.Any(kvp =>
kvp.Key == "PartitionKey" && kvp.Value == "0000000001-0000000001"));

关于C# 使用通用对象操作 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45872147/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com