【问题标题】:IEnumerable serialize as [JsonObject] in Json.NET, without using the attributeIEnumerable 在 Json.NET 中序列化为 [JsonObject],不使用属性
【发布时间】:2022-01-19 12:07:09
【问题描述】:

我想将 IEnumerable 序列化为 JsonObject,就像通过应用 [JsonObject] 属性对其进行序列化的方式一样,但我无法通过引入此属性来更改 DTO 类。

有没有办法告诉(反)序列化器强制 JsonObject(反)序列化?

【问题讨论】:

  • 请提供您的课程示例和您想要将其序列化为的 json

标签: c# json serialization json.net


【解决方案1】:

是的,您可以使用自定义 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

【讨论】:

  • 非常酷,正是我所需要的。这个例子是正确的,我实际上想要一个带有额外元数据的列表来序列化为对象:-)
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 2020-06-08
  • 2012-12-18
  • 1970-01-01
相关资源
最近更新 更多