如何在使用JSON.Net序列化期间有条件地忽略字段和属性? 我不能从JsonIgnoreAttribute
继承,因为它是sealed
类。我该怎么办?如何在使用JSON.Net序列化期间有条件地忽略字段和属性?
回答
我发现答案。我从JsonConverter
继承并创建一个新的转换器。
public class CustomJsonConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var list = (IList)value;
JArray s = new JArray();
foreach (var item in list)
{
JToken token = JToken.FromObject(item);
JObject obj = new JObject();
foreach (JProperty prop in token)
{
if (prop.Name != "Title") // your logic here
obj.Add(prop);
}
s.Add(obj);
}
s.WriteTo(writer);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter.");
}
public override bool CanRead
{
get { return false; }
}
public override bool CanConvert(Type objectType)
{
return objectType != typeof(IList);
}
}
您可以使用JSON.NET的ShouldSerialize -syntax。有一个关于JSON.NET网站一个很好的例子:
http://www.newtonsoft.com/json/help/html/ConditionalProperties.htm
public class Employee
{
public string Name { get; set; }
public Employee Manager { get; set; }
public bool ShouldSerializeManager()
{
// don't serialize the Manager property if an employee is their own manager
return (Manager != this);
}
}
如果ShouldSerialize不适合你的需求,你可以采取与ContractResolvers序列化的完全控制:http://www.newtonsoft.com/json/help/html/ContractResolver.htm
从来没有运气得到这个工作,断点表明,这是从来没有被称为序列化过程中。 – Wobbles
请注意,ShouldSerialize语法是一个约定,使得对于属性Foo,您将拥有一个ShouldSerializeFoo()方法,该方法将返回Foo是否应序列化的真或假。 – CharlieNoTomatoes
- 1. 如何使用XStream有条件地序列化字段(属性)
- 2. 在使用Jackson反序列化期间有选择地忽略JSON属性
- 3. 使用Json.Net反序列化时忽略一个属性ItemRequired = Required.Always
- 4. 如何忽略XmlSerializer反序列化期间只读属性集?
- 5. .net序列化:如何选择性地忽略数据字段
- 6. Newtonsoft Json.NET在序列化时忽略默认日期时间值
- 7. 在序列化对象时有条件地忽略嵌套属性
- 8. 如何在序列化对象字段和属性时忽略EmitDefaultValue = false
- 9. 在.NET JSON序列化期间忽略字段;类似于[XmlIgnore]?
- 10. json序列化期间忽略对象属性
- 11. 序列化程序忽略使用另一个序列化属性的属性
- 12. JSON.Net忽略只有null属性的类
- 13. 序列化程序忽略属性:值
- 14. 如何忽略使用BinaryFormatter序列化的属性?
- 15. 如何忽略类中的属性如果为null,使用json.net
- 16. 反序列化时忽略属性
- 17. 序列化时忽略属性
- 18. 从WebControl序列化忽略属性
- 19. 自定义Json序列化器通过忽略类属性来序列化和反序列化所有属性
- 20. 在json.net中错误类型导致的反序列化时忽略属性
- 21. 如何使JSON.NET在序列化期间呈现前向引用
- 22. 序列化如何动态地忽略
- 23. 忽略表单字段以序列化
- 24. JSON.NET和nHibernate,在序列化时忽略懒加载的对象
- 25. 如何在通过ObjectMapper序列化类时忽略属性
- 26. 使用JSON.NET有条件地将JSON字符串或数组属性反序列化为C#对象?
- 27. JSON.NET忽略我的所有属性,而属性JsonProperty
- 28. 使用Json.NET序列化时忽略特定的数据类型?
- 29. 序列化为JSON(使用Json.Net),同时忽略继承成员
- 30. 忽略[JsonIgnore]序列化/反序列化属性
你检查了[ScriptIgnore](http://stackoverflow.com/questions/10169648/how-to-exclude-property-from-json-serialization)吗? – Kurubaran
@Kurubaran是的,但我想忽略一个字段有条件.. –