B.B*_*dan -101 c# json dictionary key-value keyvaluepair
我正在使用WEB API接收来自客户端应用程序的请求以保存联系信息,我只需要在数据有错误时发送错误消息,否则没有TODO
我早期使用过字典
例如:
Dictionary<string, string> error = new Dictionary<string, string>
{
{"SaveContactMethod_1", "FirstName Invalid"},
{"SaveContactMethod_2", "LastName Invalid"},
{"SaveContactMethod_3", "MiddleName Invalid"},
}
Run Code Online (Sandbox Code Playgroud)
相应的JSON对象是
{
"error" : {
"SaveContactMethod_1":"FirstName Invalid",
"SaveContactMethod_2":"LastName Invalid",
"SaveContactMethod_3":"MiddleName Invalid"
}
}
Run Code Online (Sandbox Code Playgroud)
但我需要一个唯一的密钥(即重复键),所以我改变了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"),
}
Run Code Online (Sandbox Code Playgroud)
相应的JSON对象是
{
"error" : [
{ "key":"SaveContactMethod", "value":"FirstName Invalid" },
{ "key":"SaveContactMethod", "value":"LastName Invalid" },
{ "key":"SaveContactMethod", "value":"MiddleName Invalid" }
]
}
Run Code Online (Sandbox Code Playgroud)
我的要求:我需要添加一个Duplicate Key,我需要Json Output像Dictionary一样.请帮助我.
预期输出:JSON
{
"error" : {
"SaveContactMethod":"FirstName Invalid",
"SaveContactMethod":"LastName Invalid",
"SaveContactMethod":"MiddleName Invalid"
}
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*rdt 101
不,这是不可能的.
这将是无效的*JSON:
{
"error" : {
"SaveContactMethod":"FirstName Invalid",
"SaveContactMethod":"LastName Invalid",
"SaveContactMethod":"MiddleName Invalid"
}
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里查看:
Warning:Duplicate key, names should be unique.[Code 23, Structure 9]
Warning:Duplicate key, names should be unique.[Code 23, Structure 13]
Run Code Online (Sandbox Code Playgroud)
如果你真的想要走这条路,根据RFC 4627,你可以使用这个StringBuilder类.
既然你似乎不明白,那么取决于你所谓的有效意味着什么.
如果对象中存在重复的名称字符串,则应覆盖相同键的词法上先前的值.
这意味着:如果你得到三个SaveContactMethod,你只需要"MiddleName Invalid"ECMA脚本(JS).使用c#序列化,这甚至是不可能的.你需要为它编写自己的JsonSerializer.
rmu*_*unn 90
你有一个经典的"XY"问题.你问过"我怎么做X",但是你真的需要做Y而你认为X是到达Y的唯一方法 - 但X要么不可能要么非常难.通过稍微改变你的要求,你可以用不同的方式来到Y,但是你还没有看到它,因为你被困在X.
这是您的X:您想要获得的JSON格式:
{
"error" : {
"SaveContactMethod":"FirstName Invalid",
"SaveContactMethod":"LastName Invalid",
"SaveContactMethod":"MiddleName Invalid"
}
}
Run Code Online (Sandbox Code Playgroud)
正如其他人所说的那样,当你将它加载到C#代码中时,它将丢弃所有错误消息.
但是,有一种非常简单的方法可以获取所有错误消息.您只需要更改您希望看起来像这样的JSON :
{
"error" : {
"SaveContactMethod": [
"FirstName Invalid",
"LastName Invalid",
"MiddleName Invalid"
]
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只有一条错误消息,则仍应使用列表:
{
"error" : {
"SaveContactMethod": [
"FirstName Invalid"
]
}
}
Run Code Online (Sandbox Code Playgroud)
这样,当您将JSON加载到C#代码中时,它将始终具有相同的类型Dictionary<string,List<string>>,无论是一个错误还是多个错误.
这就是XY问题中的Y. 而不是在"我希望JSON中有重复键"的墙上敲打你的头,找到绕墙的方法:拥有一个带有值列表的单个键.现在,您可以执行您真正需要的操作,即从表单中获取所有错误消息,每个错误消息只需一个键名.
| 归档时间: |
|
| 查看次数: |
5414 次 |
| 最近记录: |