【发布时间】:2017-07-12 02:14:49
【问题描述】:
我正在使用 WEB API 接收来自客户端应用程序的保存联系信息的请求,并且只有在数据有错误时才需要发送错误消息;否则没有待办事项
之前我用过字典
例如:
Dictionary<string, string> error = new Dictionary<string, string>
{
{"SaveContactMethod_1", "FirstName Invalid"},
{"SaveContactMethod_2", "LastName Invalid"},
{"SaveContactMethod_3", "MiddleName Invalid"},
}
相应的 JSON 对象是
{
"error" : {
"SaveContactMethod_1":"FirstName Invalid",
"SaveContactMethod_2":"LastName Invalid",
"SaveContactMethod_3":"MiddleName Invalid"
}
}
但我需要一个唯一密钥(即重复密钥),所以我将Dictionary<string, string> 更改为List<KeyValuePair<string, string>>
List<KeyValuePair<string, string>> error = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("SaveContactMethod", "FirstName Invalid"),
new KeyValuePair<string, string>("SaveContactMethod", "LastName Invalid"),
new KeyValuePair<string, string>("SaveContactMethod", "MiddleName Invalid"),
}
相应的 JSON 对象是
{
"error" : [
{ "key":"SaveContactMethod", "value":"FirstName Invalid" },
{ "key":"SaveContactMethod", "value":"LastName Invalid" },
{ "key":"SaveContactMethod", "value":"MiddleName Invalid" }
]
}
我的要求:我需要添加一个重复键,我需要像字典一样的 Json 输出。
预期输出:JSON
{
"error" : {
"SaveContactMethod":"FirstName Invalid",
"SaveContactMethod":"LastName Invalid",
"SaveContactMethod":"MiddleName Invalid"
}
}
【问题讨论】:
-
也许您需要与您的客户交谈并向他们解释这是一个愚蠢的要求,可能会在未来引入各种问题?
-
是的,从技术上讲,这是有效的 JSON,但是,根据规范,它的 含义 是忽略前面的重复键。因此,您的在线工具中的警告。如果您关心数据的完整性,则 JSON 无效。由于您确实关心完整性,因此您不能再将其称为 JSON。它现在是您自己的自定义格式,恰好类似于 JSON
-
几天后,我们将看到来自这家公司的另一位开发人员的问题:“如何解析带有重复键的 JSON?我需要所有值,但只需要我的库返回最后一个。” 哦,好吧...
-
@B.Balamanigandan:我说的是可怜的家伙,他必须解析你正在创建的输出,而不是你。 :-)
-
任何时候你发现自己说“我需要一个重复的密钥”,我认为是时候重新考虑你的设计了。
标签: c# json dictionary key-value