[英]convert JSON to c# dictionary
我有一个 .json 文件,我想将其转换为 c# 字典(字符串,字符串)。
JSON 看起来像:
[
{
"data": "data",
"id": "1"
},
{
"data": "data2",
"id": "2"
}
]
实现它的最简单方法是什么?
您问题中的 JSON 是一个对象数组,其中包含与键和值相对应的两个属性,您希望将 map 指向包含这些键和值的Dictionary<string, string>
,例如{"data":"1","data2":"2"}
或{"1":"data","2":"data2"}
(您的问题不清楚您想要哪个)。
为此,首先引入与数组中的 JSON 对象对应的 DTO:
record DataItemDTO(string data, string id);
但是在早于 c# 9 / .NET 5 的 c# 版本中,如@ flydog57所述,改为定义:
public class DataItemDTO { public string data {get; set;} public string id {get; set;} }
现在你可以这样做:
await using var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true);
var list = await JsonSerializer.DeserializeAsync<List<DataItemDTO>>(stream);
var dictionary = list?.ToDictionary(d => d.data, d => d.id);
演示小提琴#1在这里。
或者,如果您希望将"id"
属性用作字典键,请执行以下操作:
var dictionary = list?.ToDictionary(d => d.id, d => d.data);
演示小提琴#2在这里。
如果您希望使用同步 IO,请执行以下操作:
using var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
var list = JsonSerializer.Deserialize<List<DataItemDTO>>(stream);
演示小提琴#3在这里。
笔记:
这里的path
是一个 c# 字符串,其中包含磁盘上 JSON 文件的路径。 在您的评论中,您提到您尝试了File.ReadAllText(@"PATH")
但此代码可能失败,因为它试图读取名为PATH
的文件,而不是位于某个指定路径的文件。
如果您的 JSON 对象数组包含字典键属性的重复值,例如,如果您想使用"data"
作为键:
[ { "data": "data", "id": "1" }, { "data": "data", "id": "2" } ]
您将收到System.ArgumentException: An item with the same key has already been added
构建字典。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.