如何序列化IList <T>等接口

Dan*_*ens 13 c# interface list xml-serialization

可能重复:
如何序列化IList <T>?

我想序列化的类(我们称之为S)包含该类型的属性IList<T>那里T是我所定义的另一个类.当我尝试将类的实例序列化为SXML 时,我得到一个异常.这是可以理解的,因为XmlSerializer不知道使用哪个具体类.有没有办法(希望使用属性)指定在序列化/反序列化实例时要实例化的具体类.我的类实现S创建了一个类的实例List<T>.这是一些代码来说明我的例子:

using System;
using System.Xml.Serialization;
using System.IO;

[Serializable]
public class T { }

[Serializable]
public class S
{
    public IList<T> ListOfTs { get; set; }

    public S()
    {
        ListOfTs = new List<T>();
    }
}

public class Program
{
    public void Main()
    {
        S s = new S();
        s.ListOfTs.Add(new T());
        s.ListOfTs.Add(new T());
        XmlSerializer serializer = new XmlSerializer(typeof(S));
        serializer.Serialize(new StringWriter(), s);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望有一个属性,我可以放在ListOfTs序列化的定义之上,"假设List<T>序列化/反序列化的实例".

Azh*_*any 14

改变

public IList<T> ListOfTs { get; set; }
Run Code Online (Sandbox Code Playgroud)

public List<T> ListOfTs { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后它会工作.

  • 我会这样做,除了这会改变`S`类的接口.虽然这不太可能产生实际影响,但从原理上来说,我想看看是否有办法在不改变类型的情况下解决问题. (4认同)