Microsoft.SqlServer.Management.smo.Column的XmlSerialization

时间:2012-04-20 10:36:37

标签: c# xml serialization xml-serialization

我在序列化类型为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

0 个答案:

没有答案