【发布时间】:2009-08-04 04:36:41
【问题描述】:
我正在尝试序列化一个派生自 BindingList(Floor) 的类,其中 Floor 是一个仅包含属性 Floor.Height 的简单类
这是我的课程的简化版
[Serializable]
[XmlRoot(ElementName = "CustomBindingList")]
public class CustomBindingList:BindingList<Floor>
{
[XmlAttribute("publicField")]
public string publicField;
private string privateField;
[XmlAttribute("PublicProperty")]
public string PublicProperty
{
get { return privateField; }
set { privateField = value; }
}
}
我将使用以下代码序列化 CustomBindingList 的一个实例。
XmlSerializer ser = new XmlSerializer(typeof(CustomBindingList));
StringWriter sw = new StringWriter();
CustomBindingList cLIst = new CustomBindingList();
Floor fl;
fl = new Floor();
fl.Height = 10;
cLIst.Add(fl);
fl = new Floor();
fl.Height = 10;
cLIst.Add(fl);
fl = new Floor();
fl.Height = 10;
cLIst.Add(fl);
ser.Serialize(sw, cLIst);
string testString = sw.ToString();
然而,上面的 testString 最终被设置为以下 XML:
<CustomBindingList xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
<Floor Height="10" />
<Floor Height="10" />
<Floor Height="10" />
</CustomBindingList>"
如何让“publicField”或“publicProperty”也序列化?
【问题讨论】:
-
从几乎任何系统集合类派生都是一个非常糟糕的主意。实现一个不扩展的接口。
-
我不想从 IBindingList 派生,因为它不是泛型的,而且我不喜欢非泛型集合,每次我想做某事时都必须转换为我的真实对象类型。
-
[Serializable]属性被 XML 序列化忽略。你应该删除它。
标签: c# serialization xml-serialization bindinglist