当我从类继承并序列化新类时,我将获得所有属性。我怎么才能防止这种情况?我无法控制我继承的类。所以我不能向它的属性(XmlIgnore)添加属性。
示例
class A
{
public string PropertyA {get;set;}
}
class B:A
{
public string PropertyB {get;set;}
}
当我用B类型序列化一个对象时,我得到了PropertyA和PropertyB,我只想要PropertyB
我使用序列化
Type t = serObj.GetType();
XmlSerializer xser = new XmlSerializer(t);
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
xser.Serialize(sw, serObj);
string xml = sw.ToString();
发布于 2011-03-26 06:00:56
如果B
是从A
继承的,那么它继承了PropertyA
,而您对此无能为力。如果您不想在序列化PropertyA
实例时序列化B
,那么首先您可能不应该继承A
.
无论如何,我不认为XML序列化可以帮助您完成您想要做的事情,除非您自己实现了IXmlSerializable
.
发布于 2011-03-26 07:06:03
这就是我想出的解决办法。
public void WriteXml(XmlWriter writer)
{
foreach (PropertyInfo propertyInfo in this.GetType().GetProperties())
{
string name = propertyInfo.Name;
if (propertyInfo.DeclaringType != typeof(A))
{
object obj = propertyInfo.GetValue(this, null);
if (obj != null)
{
writer.WriteStartElement(name);
string value = obj.ToString();
writer.WriteValue(value);
writer.WriteEndElement();
}
}
}
}
发布于 2011-03-26 05:53:09
一种解决方案是在[Nonserialized]
上使用PropertyA属性。请注意,使用此属性,PropertyA将永远不会被序列化,包括当您序列化A类的实例时,这是否可以接受?
https://stackoverflow.com/questions/5442609
复制相似问题