json.net - newton json 是否支持子属性上的 ShouldSerialize?
问题描述
假设我有一个具有这种格式的对象:
new LookUpResponse
{
LookUpDetails =
new List<LookUpDetail>
{
new LookUpDetail
{
LookUpCode = "GB00B6RLLV55",
CitiCode = "GTUI",
UnitName = "Liontrust Asia Income A Inc",
UniverseCode = "O",
IsFundDriver = false
}
}
};
我想要的是允许用户选择要返回的子属性(例如selectField="LookUpDetail[LookUpCode,CitiCode]"
),然后我的代码解析它,所以我知道对于 LookupDetail 类型,我们想要返回 Lookkupcode 和 Citicode。
newton.json 可以吗?
我试过这个:
public class SelectFieldsResolver : DefaultContractResolver
{
private readonly IEnumerable<string> _selectFields;
public SelectFieldsResolver(IEnumerable<string> selectFields)
{
_selectFields = selectFields;
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
property.ShouldSerialize = instance => {
if (!_selectFields.IsNullOrEmpty() && !_selectFields.Any(f => string.Equals(f, property.PropertyName, StringComparison.InvariantCultureIgnoreCase))) return false;
var value = instance?.GetType().GetProperty(property.PropertyName)?.GetValue(instance, null);
return value != null;
};
return property;
}
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
return type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Select(p => {
var jp = CreateProperty(p, memberSerialization);
jp.ValueProvider = new NullToEmptyStringValueProvider(p);
return jp;
}).ToList();
}
}
但是,CreateProperty 和 CreateProperties 方法只在根级别调用(在 LookUpDetails 属性上调用),我想要的是当子对象 LookUpDetail 被序列化时,这些函数也应该被调用,所以我可以排除字段对儿童。
可能吗?
解决方案
推荐阅读
- javascript - 如何将包含自然值和货币的字段相乘?
- flutter - 即使我测试了数据是正确的,Flutter Provider 也没有更新我的 Widget?
- elasticsearch - 结合字符串匹配和嵌套字段值的 ElasticSearch 查询
- python - 在python中查找单词是否以某个后缀结尾
- flutter - 如何在为 endDrawer 自动添加的 appbar 中删除尾随汉堡包
- hadoop - 托管表不包含数据,而数据存在于外部表中 - 在 Hive 中
- javascript - 我如何在简单的 youtube api 搜索 javascript 中隐藏 quot 和 amp
- dolphindb - DolphinDB 是否支持保留策略?
- scala - Scala得到一个空指针异常,如何用最小的改变来修复它
- javascript - 为什么我的控制器没有被导出?