C# 如何基于JSON.NET中的自定义属性有条件地反序列化属性
假设我有以下几个类:C# 如何基于JSON.NET中的自定义属性有条件地反序列化属性,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,假设我有以下几个类: public class SomeBase { } public class ACommon : SomeBase { [IsInput, IsOutput, IsInternal] public int AInput1 { get; set; } [IsOutput, IsInternal] public int AOutput1 { get; set; } [IsInternal] public int AInterna
public class SomeBase
{
}
public class ACommon : SomeBase
{
[IsInput, IsOutput, IsInternal]
public int AInput1 { get; set; }
[IsOutput, IsInternal]
public int AOutput1 { get; set; }
[IsInternal]
public int AInternal1 { get; set; }
[IsOutput, IsInternal]
public new BCommon ARefToB { get; set; }
}
public class BCommon : SomeBase
{
[IsInput, IsOutput, IsInternal]
public int BInput1 { get; set; }
[IsOutput, IsInternal]
public int BOutput1 { get; set; }
[IsInternal]
public int BInternal1 { get; set; }
}
假设我有以下描述ACommon对象的JSON:
{\n输出1 \:1\a输出1 \:2\n内部1 \:3\a外部目标\:{\n输出1 \:11\b输出1 \:12\b内部1 \:13}
我希望能够以3种不同的方式反序列化此字符串:
所有属性都是反序列化的
所有具有IsInternal属性的属性都设置为某个自定义值
所有具有IsInternal或IsOutput属性的属性都设置为某个自定义值
例如,当我使用第三个选项反序列化时,我的对象看起来像:
A.AInput=1
A.A输出1=-1
A.AInternal1=-1
A.ARefToB.BInput1=11
A.ARefToB.BOutput1=-1
A.ARefToB.BInternal1=-1
我一直在考虑使用自定义转换器,但还没有成功地以相同的方式递归转换父对象中的每个对象。我非常确定您必须实现自定义转换器。你看到这个问题了吗?另外,如果你能为一个几乎可以正常工作的自定义转换器提供代码,我将重新讨论这个问题,并尝试提供任何必要的修复。@evanmcdonnal我已经看到了这个问题,但它对我没有帮助,因为它没有提供查看属性属性并相应设置属性的方法。你看过关于序列化属性的文档吗?我与他们的合作非常少,但这些文档是一个很好的起点,因为它们至少会为您提供有关如何访问这些值的信息;