我正在使用 Newtonsoft.Json
试图将JSON转换为 Dictionary<string,string>
这是JSON文件:
[
{
"<p dir=\"rtl\">":""
},
{
"<p>":""
},
{
"<p dir='rtl'>":""
},
{
"<div dir='rtl'>":""
},
{
"<div>":""
},
{
"<div dir=\"rtl\">":""
},
{
"<script>":"<script>"/
},
{
"</script>":"</script>"
},
{
"<button>":"<button>"
},
{
"<button":"<button"
},
{
"</button>":"</button>"
},
{
"<br>":"<br>"
},
{
"<br />":"<br>"
},
{
"<br/>":"<br>"
},
{
"</br>":"<br>"
},
{
"\"":""
}
]
这是代码:
var replaceTags = System.IO.File.ReadAllText(JSON_FILE_PATH);
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(replaceTags);
我有以下例外:
无法将当前JSON数组(例如[1,2,3])反序列化为类型'System.Collections.Generic.Dictionary`2 [System.String,System.String]',因为该类型需要一个JSON对象(例如{“名称“:”值“})正确反序列化 . 要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),例如List从JSON数组反序列化 . JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化 . 路径'',第1行,第1位 .
为什么会这样?
谢谢!
3 回答
下面是将字符串,字符串序列化为JSON文本的简单示例 . 一旦阅读,您的文本显然会来自您的文件路径 .
这将为您提供以下字符串 .
然后,这将反序列化回字典 .
建议你对此进行逆向工程 . 手动创建包含您期望的数据的字典 . 序列化它,看看文件内容应该是什么 .
您可能会发现在“JSON_FILE_PATH”中生成源文件的任何内容都是您的问题的根源 .
就像我在评论中所说的那样,你的JSON不是字典,而是一系列字典 . 您可以将它们全部合并到一个字典中,如下所示:
但是,由于JSON的结构方式,不能保证不会有重复的密钥 . 为了防止这种情况,您还可以过滤掉任何可能的重复项:
在我看来,除非有一个很好的理由,你绝对需要将这个JSON序列化为单个
Dictionary
,你应该把它留作一个字典数组(因为它就是这样):你是JSON是不对的,对于字符串类型字符串,字符串 . 尝试更改格式以匹配: