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



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

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

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

对于这种情况,是否有任何解决方案?

您可以实现自己的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; }
}

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

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

以下是一些链接:

  • http://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm
  • http://blog.maskalik.com/asp-net/json-net-implement-custom-serialization/

希望,它会有所帮助。

相关内容

  • 没有找到相关文章

最新更新