3
具有以下類:有條件輸出處理JSON.NET
class Test {
[MyAttr]
public string Name;
}
我怎麼能延長JSON.NET如果我需要修剪打上MyAttr
特定長度的所有屬性的值?似乎我不能在自定義JsonConverter
中這樣做,因爲我需要訪問代表原始屬性的MemberInfo
。
具有以下類:有條件輸出處理JSON.NET
class Test {
[MyAttr]
public string Name;
}
我怎麼能延長JSON.NET如果我需要修剪打上MyAttr
特定長度的所有屬性的值?似乎我不能在自定義JsonConverter
中這樣做,因爲我需要訪問代表原始屬性的MemberInfo
。
更深層次的閱讀文檔和源代碼,它看起來像合同解析器之後是要走的路:
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;
}
}
由於易如反掌!