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");
}