2015-11-16 2 views
3

Для целей API мне нужно игнорировать некоторые поля на основе критериев, которые я получаю. Обычно для этого можно использовать атрибут [ScriptIgnore].Игнорировать поля C# динамически из Json Serialize

Но как я могу игнорировать поля динамически (на основе некоторых условных обозначений)?

ответ

6

Использовать атрибут JsonIgnore в пакете Newtonsoft.Json.

затем, если вы хотите быть динамически условными, см ShouldSerialize

4

Предполагая, что вы используете Json.Net, вы можете создать свой собственный конвертер для определенного типа, создав класс, который наследуется от JsonConverter.

public class MyJsonConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return objectType == typeof(MyType); 
    } 

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

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     var objectToSerialize = new {}; //create the object you want to serialize here, based on your dynamic conditions 
     new JsonSerializer().Serialize(writer, objectToSerialize); //serialize the object to the current writer 
    } 
} 

Тогда вы называете JsonConvert.DeserializeObject и передать его пользовательский преобразователь:

JsonConvert.DeserializeObject<MyType>(jsonString, new MyJsonConverter());