2016-04-26 2 views
1

Я использую Json.NET для сериализации данных проверки для поля данных. На стороне .NET данные проверки являются списком объектов ValidationAttribute. Тем не менее, я хотел бы сериализации их в особой форме, как это:Преобразование определенных объектов в словари перед сериализацией

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

В идеальном решении я мог бы просто перехватывать объект до сериализации, и я мог бы создать соответствующий Dictionary<string, object> объект для сериализации вместо оригинала один.

Есть ли решения для этого сценария?

ответ

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; } 
} 

или передать экземпляр вашего сериализатором сериализовать Митос:

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

Вот несколько ссылок:

Надежда, это поможет.

+0

На самом деле я знал о JsonConverters на каком-то уровне, но не думал, что эта задача может быть легко решена с ними. Я использовал пользовательский JsonConverter и заполнил JObject согласно моим потребностям. Спасибо. –

Смежные вопросы