Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#JSON将字典序列化为{key:value,…}而不是{key:key,value:value,…}_C#_Json_Serialization_Dictionary - Fatal编程技术网

C#JSON将字典序列化为{key:value,…}而不是{key:key,value:value,…}

C#JSON将字典序列化为{key:value,…}而不是{key:key,value:value,…},c#,json,serialization,dictionary,C#,Json,Serialization,Dictionary,是否可以使用以下格式的DataContractJsonSerializer将.Net字典序列化为JSON: { key0:value0, key1:value1, ... } 我使用字典,因为并没有预定义的输入结构 我只是对DataContractJsonSerializer结果感兴趣!我已经找到了一个“代理”示例,但是在输出中有一个额外的“数据”,如果字典是,转义也为false 我已经找到了解决方案,多么需要的解决方案!首先,一个可序列化的“dictionary”类: (当然,

是否可以使用以下格式的DataContractJsonSerializer将.Net字典序列化为JSON:

{
  key0:value0,
  key1:value1,
  ...
}
我使用字典,因为并没有预定义的输入结构

我只是对DataContractJsonSerializer结果感兴趣!我已经找到了一个“代理”示例,但是在输出中有一个额外的“数据”,如果字典是,转义也为false


我已经找到了解决方案,多么需要的解决方案!首先,一个可序列化的“dictionary”类: (当然,此示例仅以一种方式工作,但我不需要反序列化)


不幸的是,这在最新版本的DataContractJsonSerializer中目前不可能实现。见:

当前建议的解决方法是使用上面建议的JavaScriptSerializer


祝你好运

我在这段代码中使用了开箱即用的MVC4(注意
ToDictionary
中的两个参数)

我得到了预期的结果:

{"partials":{"cartSummary":"\u003cb\u003eCART SUMMARY\u003c/b\u003e"}}

重要提示:MVC4中的WebAPI使用现成的JSON.NET序列化,但标准的web
JsonResult
action result不使用。因此,我建议使用自定义ActionResult强制JSON.NET序列化。你也可以得到很好的格式

下面是一个简单的actionresult
JsonNetResult

序列化日期时,您将看到不同之处(并确保使用的是正确的日期):

Microsoft方式:

 {"wireTime":"\/Date(1355627201572)\/"}
JSON.NET方式:

 {"wireTime":"2012-12-15T19:07:03.5247384-08:00"}
Json.NET就是这样做的

Dictionary<string, string> values = new Dictionary<string, string>();
values.Add("key1", "value1");
values.Add("key2", "value2");

string json = JsonConvert.SerializeObject(values);
// {
//   "key1": "value1",
//   "key2": "value2"
// }
字典值=新字典();
添加(“键1”、“值1”);
添加(“键2”、“值2”);
字符串json=JsonConvert.SerializeObject(值);
// {
//“键1”:“值1”,
//“键2”:“值2”
// }

更多示例:
DataContractJsonSerializer
上使用属性
使用SimpleDictionaryFormat
,并将其设置为
true


做这个工作:)

MyJsonDictionary类对我来说工作得很好,只是结果输出是XML编码的,所以“0”变成了“0030”。 我目前被困在.NET3.5上,和其他许多解决方案一样,许多其他解决方案对我来说都不可用。 “将图片颠倒过来”,我意识到我永远无法说服微软给我想要的格式,但是…

字符串json=XmlConvert.DecodeName(xmlencodedJson);

塔达

结果就是您所期望看到的——普通的人类可读的和非XML编码的。
在.NET 3.5中工作。

在.NET 5及更高版本中,您只需编写:

using System;
using System.Collections.Generic;
                    
public class Program
{
    public static void Main()
    {
        Dictionary<string, string> values = new();
        values.Add("key1", "value1");
        values.Add("key2", "value2");

        string json = System.Text.Json.JsonSerializer.Serialize(values);
        Console.WriteLine(json);
    }
}
使用系统;
使用System.Collections.Generic;
公共课程
{
公共静态void Main()
{
字典值=new();
添加(“键1”、“值1”);
添加(“键2”、“值2”);
字符串json=System.Text.json.JsonSerializer.Serialize(值);
Console.WriteLine(json);
}
}
要获取
{“key1”:“value1”,“key2”:“value2”}


没有外部依赖关系。

是否有任何特定原因要限制为
DataContractJsonSerializer
?每次我进行比较(这是好几次:我非常“喜欢”我的序列化程序)时,这是最不受欢迎的.NET JSON工具;我总是看JavaScriptSerializer或JSON.NetIn,您在什么上下文中使用它?也就是说,这是一个WCF应用程序、ASP.NET应用程序或其他应用程序。您是以自己调用WriteObject的方式使用DataContractJsonSerilizer,还是某个框架为您这样做?您的帖子中不清楚的是,您希望字典中有一个JSON对象,其属性(及其值)是名称/值对。要么是错误的,要么是错误的,因为它不能是JSON数组,因为不能有一个JSON数组,其中数组中的每个元素都有不同的属性名。那么,你能清楚你想要的实际格式吗?有人想出了相反的办法吗?如中所示,如何让它正确地反序列化
MyJsonDictionary
?。请编辑您的问题并添加答案,而不是实际添加答案,因为答案第二行应该是
string values=JsonConvert.SerializeObject(values)在序列化http响应时,如何为wcf的默认行为设置这些设置?对我很有用,谢谢!我必须使用
config.Formatters.JsonFormatter.UseDataContractJsonSerializer=true
WebApiConfig.cs
中。
 {"wireTime":"\/Date(1355627201572)\/"}
 {"wireTime":"2012-12-15T19:07:03.5247384-08:00"}
Dictionary<string, string> values = new Dictionary<string, string>();
values.Add("key1", "value1");
values.Add("key2", "value2");

string json = JsonConvert.SerializeObject(values);
// {
//   "key1": "value1",
//   "key2": "value2"
// }
using System;
using System.Collections.Generic;
                    
public class Program
{
    public static void Main()
    {
        Dictionary<string, string> values = new();
        values.Add("key1", "value1");
        values.Add("key2", "value2");

        string json = System.Text.Json.JsonSerializer.Serialize(values);
        Console.WriteLine(json);
    }
}