我在序列化类型为Column的自定义mylist时遇到错误,即Microsoft.SqlServer.Management.smo.Column。我不知道如何序列化这个。
我按如下方式序列化了一个类:
ValidationClass validation = new ValidationClass();
XmlSerializer serializer = new XmlSerializer(typeof(ValidationClass));
TextWriter writer = new StreamWriter(@"D:\xml doc\AspxGenerator.xml");
serializer.Serialize(writer, validation);
writer.Close();
为此编写的验证类如下:
[Serializable]
public class ValidationClass
{
public bool IsNotNull { get; set; }
public bool IsEmail { get; set; }
public MyList<MyTable> MaxLimit { get; set; }
public int MinLimit { get; set; }
public bool IsValidDate { get; set; }
public SerializableDictionary<int, string> PropertyNames;// { get; set; }
public ValidationClass()
{
PropertyNames = new SerializableDictionary<int,string>();
PropertyNames.Add(0, "A");
PropertyNames.Add(1, "B");
PropertyNames.Add(2, "C");
MaxLimit = new MyList<MyTable>();
MyTable a = new MyTable();
MyTable b = new MyTable();
MaxLimit.Add(a);
MaxLimit.Add(b);
//MaxLimit = new MyList<int>();
//MaxLimit.Add(0);
//MaxLimit.Add(2);
}
}
此外,MyList实现为:
[XmlRoot("dictionary")]
public class MyList<Tkey> : List<Tkey>, IXmlSerializable
{
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(Tkey));
bool wasEmpty = reader.IsEmptyElement;
reader.Read();
if (wasEmpty)
return;
while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
{
reader.ReadStartElement("item");
reader.ReadStartElement("key");
Tkey key = (Tkey)keySerializer.Deserialize(reader);
reader.ReadEndElement();
this.Add(key);
reader.ReadEndElement();
reader.MoveToContent();
}
reader.ReadEndElement();
}
public void WriteXml(System.Xml.XmlWriter writer)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(Tkey));
foreach (Tkey key in this)
{
writer.WriteStartElement("item");
writer.WriteStartElement("key");
keySerializer.Serialize(writer, key);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
#endregion
}
运行此操作后,我收到错误:&#34;出现错误反映类型&#39; Microsoft.SqlServer.Management.Smo.Column&#39;。&#34;
内部异常是:&#34; {&#34;要进行XML可序列化,从ICollection继承的类型必须在其继承层次结构的所有级别都具有Add(Microsoft.SqlServer.Management.Smo.Property)的实现。 Microsoft.SqlServer.Management.Smo.SqlPropertyCollection未实现Add(Microsoft.SqlServer.Management.Smo.Property)。&#34;}&#34;
实现IXmlSerilzable是完美的,没有任何问题。问题在于我使用的类型是Column,即Microsoft.SqlServer.Management.smo.Column。我通过替换&#34; Column&#34;检查了这段代码。键入&#34; string&#34;类型,然后它完美地工作。类列也是密封类。
我想序列化ValidationClass。请建议如何操作。
谢谢&amp;问候, MAYUR