在序列化之前将特定对象转换为字典

时间:2016-04-26 13:26:09

标签: c# json.net

我使用Json.NET序列化数据字段的验证数据。在.NET端,验证数据是ValidationAttribute个对象的列表。但是,我想以这样的特殊形式将它们序列化:

[
  { Type: 'Required', ErrorMessage: '{FieldName} is required' },
  { Type: 'RegularExpression', Pattern: '^\d+$', ErrorMessage: '...'
]

在一个理想的解决方案中,我可以在序列化之前简单地拦截对象,我可以创建一个相应的Dictionary<string, object>对象来序列化而不是原始对象。

这种情况有没有解决方案?

1 个答案:

答案 0 :(得分:2)

您可以实现自己的JsonConverter课程,并根据需要转换您的收藏。

您只需要创建自己的类并从JsonConverter

继承它
public class YourSerializer : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override bool CanConvert(Type objectType)
    {
        return typeof(YourClassName).IsAssignableFrom(objectType);
    }
}

然后你需要装饰你的类,它将使用属性进行序列化(看起来不是你想要的)

[JsonConverter(typeof(YourSerializer))]
public class YourClassName
{
    public string Name { get; set; }
    public string Value { get; set; }
}

或者,将序列化程序的实例传递给Serialize方法:

string json = JsonConvert.SerializeObject(sourceObj, Formatting.Indented, new YourSerializer(typeof(yourClassName)));

以下是一些链接:

希望,这会有所帮助。