gpt4 book ai didi

c# - JSON.NET 中的条件输出处理

转载 作者:行者123 更新时间:2023-11-30 16:21:28 27 4
gpt4 key购买 nike

有以下类(class):

class Test {
[MyAttr]
public string Name;
}

如何扩展 JSON.NET如果我需要将标有 MyAttr 的所有属性的值修剪到特定长度?似乎我无法在自定义 JsonConverter 中执行此操作,因为我需要访问表示 origin 属性的 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;
}
}

简单易行!

关于c# - JSON.NET 中的条件输出处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13232939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com