我想将IEnumerable序列化为JsonObject,就像它通过应用[JsonObject]属性来序列化一样,但是我不能通过引入这个属性来改变DTO类。
有没有办法告诉(de)序列化程序强制JsonObject(de)序列化?
答案 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);