IEnumerable在Json.NET中序列化为[JsonObject],不使用该属性

时间:2017-12-07 08:45:52

标签: c# json serialization json.net

我想将IEnumerable序列化为JsonObject,就像它通过应用[JsonObject]属性来序列化一样,但是我不能通过引入这个属性来改变DTO类。

有没有办法告诉(de)序列化程序强制JsonObject(de)序列化?

1 个答案:

答案 0 :(得分:3)

是的,您可以使用自定义IContractResolver来执行此操作。您需要做的就是创建一个源自Json.Net的DefaultContractResolver的解析器类,并覆盖CreateContract(Type)方法,如下所示,其中FooList将替换为您的枚举类型。

class CustomResolver : DefaultContractResolver
{
    protected override JsonContract CreateContract(Type type)
    {
        if (type == typeof(FooList))
            return CreateObjectContract(typeof(FooList));

        return base.CreateContract(type);
    }
}

将解析器添加到序列化程序设置,并在序列化时使用这些设置:

var settings = new JsonSerializerSettings
{
    ContractResolver = new CustomResolver(),
    Formatting = Formatting.Indented
};

string json = JsonConvert.SerializeObject(yourObject, settings);

以下是演示:https://dotnetfiddle.net/ocyjU4