Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何基于JSON.NET中的自定义属性有条件地反序列化属性_C#_Json_Json.net_Deserialization - Fatal编程技术网

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我已经看到了这个问题,但它对我没有帮助,因为它没有提供查看属性属性并相应设置属性的方法。你看过关于序列化属性的文档吗?我与他们的合作非常少,但这些文档是一个很好的起点,因为它们至少会为您提供有关如何访问这些值的信息;