【发布时间】:2021-10-21 04:19:42
【问题描述】:
考虑下面的代码
var dict = new Dictionary<string, object>
{
{ "key 1", "value 1" },
{ "key 2", 123 }
};
var dictJson = JsonConvert.SerializeObject(dict); // yields {"key 1":"value 1","key 2":123}
var keyValuePair = dict.FirstOrDefault();
var keyValuePairJson = JsonConvert.SerializeObject(keyValuePair); // yields {"Key":"key 1","Value":"value 1"}
第一个问题是,为什么字典的第一个元素KeyValuePair<TKey, TValue>的json和Dictionary<TKey, TValue>的json不同?
第二个问题是,我怎样才能实现与序列化字典类似的 json,但只有一个项目而不是扩展集合?我的目标是有一个类似于下面的类,但没有将Key 和Value 作为序列化json 中的属性。
public class Foo
{
public KeyValuePair<string, object> Pair { get; set; }
}
【问题讨论】:
-
你为什么期望它们是一样的?
KeyValuePair和Dictionary是完全不同的东西。 -
@Sweeper 获取字典的第一个元素,我希望序列化的 json 看起来相同,但只有一个元素。
-
Dictionary可能有一个内置序列化程序,但KeyValuePair恢复为默认的Object序列化程序。 -
@IllusiveBrian 正确,但我相信它反过来。有一个 KeyValuePairConverter 可能会自动用于字典。但是当你输入一个 KeyValuePair 时,这是一件不常见的事情,它并没有被使用。因此,使用 SerializeObject 重载可以声明要使用的转换器应该会产生相同的结果。
标签: c# json .net dictionary json.net