如何使用Newtonsoft.JSON序列化实现IDictionary的类?

时间:2013-12-17 16:25:54

标签: json serialization dictionary

我又拔了我的头发。我正在通过可能的解决方案解决我的另一个问题here。我有这门课:

public class PartViewDTO : IDictionary<string, object>
{
    ...
}

它构造有它应代表的字段的详细信息 - 名称,部件号,价格等等。

我正在尝试序列化PartViewDTO的集合作为Web服务的响应,但我不希望传统字典序列化

[ { "Key": "Key1", "Value": "Value1" }, ...]

相反,我想要

{ "Key1": "Value1", ... }

我尝试了将JsonDictionaryAttribute应用于此类的几种变体:

[Newtonsoft.Json.JsonDictionary(ItemTypeNameHandling=Newtonsoft.Json.TypeNameHandling.Objects)]
public class PartViewDTO : IDictionary<string, object>

但是在运行时我得到一个异常抛出“PartViewDTO不是字典”

底线 - PartViewDTO是一个字典,但我希望它像字典中的键一样序列化,是类的属性。我正在返回IEnumerable&lt; PartViewDTO&gt;这些来自Web服务,所以我希望应用于类本身的属性将为JSON提供如何序列化的线索。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

事实证明,JSON.NET能够按照我想要的方式排版字典。问题是它无法识别我的类型是字典。我最终为PartViewDTO编写了一个自定义转换器,它完成了字典。

一切都很好!