2012-11-05 24 views
3

具有以下類:有條件輸出處理JSON.NET

class Test { 
    [MyAttr] 
    public string Name; 
} 

我怎麼能延長JSON.NET如果我需要修剪打上MyAttr特定長度的所有屬性的值?似乎我不能在自定義JsonConverter中這樣做,因爲我需要訪問代表原始屬性的MemberInfo

回答

3

更深層次的閱讀文檔和源代碼,它看起來像合同解析器之後是要走的路:

public class MyCustomConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) { 
     return true; 
    } 

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

    public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) { 
     if (value == null) { 
      writer.WriteNull(); 
      return; 
     } 
     string str = value.ToString().Substring(1, 2); 
     writer.WriteValue(str); 
    } 
} 

public class MaskContractResolver : DefaultContractResolver 
{ 
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { 
     JsonProperty property = base.CreateProperty(member, memberSerialization); 
     if (member.CustomAttributes.Any(x => typeof(MyAttr).IsAssignableFrom(x.AttributeType))) 
      property.Converter = new MyCustomConverter(); 
     return property; 
    } 
} 

由於易如反掌!