您可以扩展JSON中使用的默认JsonConverter吗?. NET用于集合



我试图编写一个自定义JsonConverter的情况下,一个人子类的列表或集合,但随后添加额外的属性到子类(见这里)。JSON的当前实现。NET只是将列表更改为子对象数组,并忽略所有添加的属性。所以我想写一个新的JsonConverter对待对象,如果它不是一个列表,只是序列化其他一切正常,但随后在序列化中添加一个名为'_Items'的新属性,其中存储实际的数据数组。

现在,我已经为特定的List子类编写了一个类,它正是这样做的,但是我必须一个接一个地手动指定所有属性。但如果我能编写一个转换器,把它当作普通对象,然后手动处理这些项,那就太好了。我甚至不在乎我是否最终复制了另一个类的一半(甚至更多!),但我希望为这些情况制作一个可重用的转换器。但是,正如我所说的,我找不到默认的转换器。

所以…有人知道在哪里吗?

JSON.NET中没有'默认转换器'。

如果您能够检查JsonSerializerInternalWriter类,请查看SerializeValue方法。其中,顶部有"转换器查找和执行"阶段。但是,如果没有匹配的转换器,则使用契约类型序列化(switch语句)。

我还没有找到一种方法(正确的方法或优雅的hack)能够在实体上执行通用契约序列化(例如:正常解析对象)与扩展的自定义序列化(我假设您正在尝试这样做)。

正如@dbc在这里所说的,您可以覆盖CanReadCanWrite以返回false并为您的属性注册CustomAsDefaultConvertor : JsonConverter

我的情况:

public class AsDefaultConverter : JsonConverter<JObject>
{
    public override JObject ReadJson(JsonReader reader, Type objectType, JObject existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
    public override void WriteJson(JsonWriter writer, JObject value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
    public override bool CanWrite => false;
    public override bool CanRead => false;
}

MyModel:

public class MyModel
{
    /// <summary>
    /// Gets or sets event id
    /// </summary>
    public string EventId { get; set; }
    /// <summary>
    /// Gets or sets trigger name
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// Gets or sets arguments
    /// </summary>
    [JsonConverter(typeof(AsDefaultConverter))]
    public JObject Arguments { get; set; }
    /// <summary>
    /// Gets or sets trigger creation date
    /// </summary>
    public DateTimeOffset Created { get; set; }
    /// <summary>
    /// Gets or sets trigger creator
    /// </summary>
    public User CreatedBy { get; set; }
} 

在启动注册中,我已经覆盖了自定义的默认JsonSerialization,但对于属性JObject Arguments,我已经指定了在这种情况下我需要的转换器。

不确定从什么时候开始,如果这是答案,但有属性JsonConvert.DefaultSettings似乎用于内部获取JsonSerializerSettings

https://www.newtonsoft.com/json/help/html/DefaultSettings.htm

相关内容

  • 没有找到相关文章

最新更新