Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Json序列化动态忽略c#字段_C#_Json_Asp.net Web Api - Fatal编程技术网

从Json序列化动态忽略c#字段

从Json序列化动态忽略c#字段,c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,出于API目的,我需要根据收到的条件忽略一些字段。通常我可以使用[ScriptIgnore]属性来完成此操作 但如何动态忽略字段(基于某些条件)?使用Newtonsoft.Json包中提供的属性 然后,如果希望它是动态有条件的,请参见假设您使用Json.Net,您可以通过创建继承自JsonConverter的类来为特定类型创建自己的转换器 public class MyJsonConverter : JsonConverter { public override bool CanConv

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

但如何动态忽略字段(基于某些条件)?使用Newtonsoft.Json包中提供的属性


然后,如果希望它是动态有条件的,请参见假设您使用
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());
JsonConvert.DeserializeObject(jsonString,new MyJsonConverter());