Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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/2/.net/24.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# 使用XmlIgnoreAttribute忽略基类属性_C#_.net_Xml_Serialization - Fatal编程技术网

C# 使用XmlIgnoreAttribute忽略基类属性

C# 使用XmlIgnoreAttribute忽略基类属性,c#,.net,xml,serialization,C#,.net,Xml,Serialization,我有一个抽象基类,在其中添加了一些虚拟属性。我希望在派生类中指定在序列化(和反序列化)过程中忽略特定的基类属性。如下所示,BaseClass-类中的Value-属性声明为virtual属性,在DerivedClass-类中,使用overrides-关键字,我选择覆盖基类的ppty,然后将XmlIgnoreAttribute-属性置于其上。然而,当我测试代码时,我仍然发现为我的派生类实例生成的XML中包含了值ppty。定义ppty也会发生同样的情况,即使我使用new关键字将其隐藏在派生类中,然后对

我有一个抽象基类,在其中添加了一些虚拟属性。我希望在派生类中指定在序列化(和反序列化)过程中忽略特定的基类属性。如下所示,
BaseClass
-类中的
Value
-属性声明为
virtual
属性,在
DerivedClass
-类中,使用
overrides
-关键字,我选择覆盖基类的ppty,然后将
XmlIgnoreAttribute
-属性置于其上。然而,当我测试代码时,我仍然发现为我的派生类实例生成的XML中包含了
ppty。定义ppty也会发生同样的情况,即使我使用new关键字将其隐藏在派生类中,然后对其应用XMLIgnoreAttribute,它也会被呈现。请问下面的代码有什么问题

public abstract class BaseClass
{
    public virtual String Value { get; set; }

     public String Definition { get; set; }

    [XmlAttribute("SeparatorCharacter")]
    public virtual String SeparatorCharacter { get; set; }
}


public class DerivedClass:BaseClass
{
    [XmlIgnore()]
    public overrides String Value { get; set; }

    [XmlAttribute("FillerCharacter")]
    public String FillValue { get; set; }

     [XmlIgnore()]
    public new String Definition { get; set; }
}

序列化程序不会考虑重写属性上的属性,无论是提供属性还是通过<代码> XMLAdditPrimeExrime。获得所需行为的唯一部分解决方法是向基类添加虚拟的

ShouldSerializeValue
方法,并在派生类中重写它以抑制
Value
的序列化。这不会阻止反序列化
,但可以将覆盖设置器设置为空

public abstract class BaseClass
{
    public virtual String Foo { get; set; }
    public virtual bool ShouldSerializeFoo () { return true ; }
}

public class DerivedClass:BaseClass
{
    public override String Foo { get; set; }
    public override bool ShouldSerializeFoo () { return false ; }
}

您的反序列化调用是什么?到哪个类/类型信息?你的
:BaseClass
?@kobojunkie而不是覆盖你尝试过新的吗?公共新字符串值{get;set;}是的,我也尝试过新的。这根本没有改变结果。因此,我在这里试图更深入地了解如何使用阿曲布他或任何其他药物来实现我希望在这里实现的目标。请您进一步解释一下。我是否需要让我的基类继承一个接口或其他什么来调用这个ShouldSerializeValue方法?不,这是一个纯粹基于名称的约定。更新的答案。如果我的基类中有多个属性,那么当派生类中的返回为false时会发生什么?基类中的所有属性都将被忽略吗?不,每个ShouldSerialize方法都针对一个属性,即它所命名的属性。希望编辑能把事情弄清楚。