从Json Serialize动态忽略c#字段

时间:2015-11-16 10:15:58

标签: c# json asp.net-web-api

出于API目的,我需要根据收到的条件忽略某些字段。通常我可以使用[ScriptIgnore]属性来执行此操作。

但我如何动态忽略字段(基于某些条件)?

2 个答案:

答案 0 :(得分:6)

使用Newtonsoft.Json包中的JsonIgnore属性。

然后,如果您希望它是动态条件的,请参阅ShouldSerialize

答案 1 :(得分: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());