2015-12-16 17 views

回答

1

我发现答案。我从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); 
    } 
} 
11

您可以使用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

+2

从来没有运气得到这个工作,断点表明,这是从来没有被称为序列化过程中。 – Wobbles

+0

请注意,ShouldSerialize语法是一个约定,使得对于属性Foo,您将拥有一个ShouldSerializeFoo()方法,该方法将返回Foo是否应序列化的真或假。 – CharlieNoTomatoes

相关问题