Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 如何将属性隐藏到基类中以进行XML序列化_C#_Xml_Serialization_Subclass - Fatal编程技术网

C# 如何将属性隐藏到基类中以进行XML序列化

C# 如何将属性隐藏到基类中以进行XML序列化,c#,xml,serialization,subclass,C#,Xml,Serialization,Subclass,让我有一个基类 public class MyClass { private bool _success; public bool Success { get { return _success; } set { _success = value; } } } 和派生类 public class MySubClass : MyClass { public string str { get; set; } } 问题:如何将

让我有一个基类

public class MyClass
{
    private bool _success;
    public bool Success
    {
        get { return _success; }
        set { _success = value; }
    }
}
和派生类

public class MySubClass : MyClass
{
    public string str { get; set; }
}
问题:如何将
MySubClass
序列化为
XML
,以便序列化结果中没有
标记

[XmlIgnore]
public bool Success
{
    get { return _success; }
    set { _success = value; }
}
[XmlIgnore]
属性告诉序列化过程忽略此属性。 它永远不会被序列化,因此在序列化的XML中不会有节点

要仅忽略子类中的字段,可以从基类重写属性

在基类中(注意
virtual
关键字):

在你的子类中

[XmlIgnore]
public override bool Success {get;set;}

如果您没有访问基类的权限,可以向类添加
ShouldSerializePropertyName
方法

public bool ShouldSerializeSuccess()
{
    return false;
}
按照约定,XmlSerializer将执行任何ShouldSerialize。。。方法来确定是否应序列化属性。你甚至可以有条件地做一些事情:

// this will serialize sucess only if it is true.
public bool ShouldSerializeSuccess()
{
    return Sucess;
}
public bool ShouldSerializeName()
{
    return !String.IsNullOrWhiteSpace(Name) && !Name.Equals("Default");
}

谢谢你的回答。但是我想在MySubClass仅序列化时隐藏
。有可能吗?我已经在软件领域工作了近二十年,但Stackoverflow从未停止过用难以置信的简短解决方案让我感到惊讶。这取决于您使用哪种方法序列化JSON。我相信
System.Web.Script.Serialization(System.Web.Extensions.dll)
命名空间中的
JavascriptSerializer
知道ShouldSerialize(…)约定:
// this will serialize sucess only if it is true.
public bool ShouldSerializeSuccess()
{
    return Sucess;
}
public bool ShouldSerializeName()
{
    return !String.IsNullOrWhiteSpace(Name) && !Name.Equals("Default");
}