我遇到的问题是外部资源不接受生成的JSON中的$ id和$ ref属性。但是我们内部需要这个,我不能只是全局禁用PreserveReferencesHandling。
如何为单一类型禁用此功能?我已经看到了[JsonObject]
属性,但由于这个类来自外部源,我无法将属性添加到它...
我查看了IContractResolver,但无法弄清楚如何禁用那里的引用处理。
谢谢!
答案 0 :(得分:1)
这可以通过覆盖custom ContractResolver
设置JsonContract.IsReference == false
的DefaultContractResolver.CreateContract()
来完成:
ContainsType()
应该为构造函数传递要禁用其参考信息的类型列表。请注意,我将此信息排除在传递给合同解析程序的确切类型的实例中。如果您还要从派生类型的实例中排除此信息,可以按如下方式修改 bool ContainsType(Type type)
{
return types.Any(t => t.IsAssignableFrom(type));
}
:
JsonSerializerSettings
另请注意,合约解析程序在const search = R.curry((id, items) => R.find(R.propEq('id', id), items));
const testSearch = R.pipe(
R.identity(() => [{id: '123'}, {id: 'asdf'}]),
search('123')
);
testSearch(); // { id: '123' }
中设置时会禁用PreserveReferencesHandling
,但在使用[JsonObject(IsReference = true)]
或{{3}等序列化属性直接设置时不会在外部类型上。
示例[JsonProperty(IsReference = true)]
。
您可能希望fiddle获得最佳效果。