C# 如何序列化列表<;对象>;

C# 如何序列化列表<;对象>;,c#,xml-serialization,C#,Xml Serialization,我正在编写通用函数来序列化给定的对象和列表,如下所示 public string SerializeObject(Object pObject)// for given object { try { String XmlizedString = null; MemoryStream memoryStream = new MemoryStream(); XmlSerializer xs = new XmlSerializer(type

我正在编写通用函数来序列化给定的对象和列表,如下所示

public string SerializeObject(Object pObject)// for given object
{
    try
    {
        String XmlizedString = null;
        MemoryStream memoryStream = new MemoryStream();
        XmlSerializer xs = new XmlSerializer(typeof(pObject));
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
        xs.Serialize(xmlTextWriter, pObject);
        memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
        XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
        return XmlizedString;
    }
    catch (Exception e) { System.Console.WriteLine(e); return null; }
}

public string SerializeObject(List<Object> pObject)// for given List<object>
{
    try
    {
        String XmlizedString = null;
        MemoryStream memoryStream = new MemoryStream();
        XmlSerializer xs = new XmlSerializer(typeof(pObject));
        XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
        xs.Serialize(xmlTextWriter, pObject);
        memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
        XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
        return XmlizedString;
    }
    catch (Exception e) { System.Console.WriteLine(e); return null; }
}
publicstringserializeobject(objectpoobject)//对于给定对象
{
尝试
{
字符串XmlizedString=null;
MemoryStream MemoryStream=新的MemoryStream();
XmlSerializer xs=新的XmlSerializer(typeof(pObject));
XmlTextWriter XmlTextWriter=新的XmlTextWriter(memoryStream,Encoding.UTF8);
序列化(xmlTextWriter,POObject);
memoryStream=(memoryStream)xmlTextWriter.BaseStream;
XmlizedString=UTF8ByteArrayToString(memoryStream.ToArray());
返回XmlizedString;
}
catch(异常e){System.Console.WriteLine(e);返回null;}
}
给定列表的公共字符串序列化对象(List pObject)//
{
尝试
{
字符串XmlizedString=null;
MemoryStream MemoryStream=新的MemoryStream();
XmlSerializer xs=新的XmlSerializer(typeof(pObject));
XmlTextWriter XmlTextWriter=新的XmlTextWriter(memoryStream,Encoding.UTF8);
序列化(xmlTextWriter,POObject);
memoryStream=(memoryStream)xmlTextWriter.BaseStream;
XmlizedString=UTF8ByteArrayToString(memoryStream.ToArray());
返回XmlizedString;
}
catch(异常e){System.Console.WriteLine(e);返回null;}
}
第一个很好用。如果我传递任何类型,它将成功返回xml字符串

更正:第二个出现编译错误(错误:无法从
List
转换为
List

我将第二个重写如下,解决了我的问题。现在它正在序列化给定的
列表

私有字符串序列化对象(T源)
{
MemoryStream MemoryStream=新的MemoryStream();
XmlSerializer xs=新的XmlSerializer(typeof(T));
XmlTextWriter XmlTextWriter=新的XmlTextWriter(memoryStream,Encoding.UTF8);
序列化(xmlTextWriter,源代码);
memoryStream=(memoryStream)xmlTextWriter.BaseStream;
字符串XmlizedString=UTF8ByteArrayToString(memoryStream.ToArray());
返回XmlizedString;
}

文章中的相关代码:

private static string SerializeObject<T>(T source)
{
    var serializer = new XmlSerializer(typeof(T));
    using (var sw = new System.IO.StringWriter())
    using (var writer = XmlWriter.Create(sw))
    {
        serializer.Serialize(writer, source);
        return sw.ToString();
    }
}
私有静态字符串序列化对象(T源)
{
var serializer=newxmlserializer(typeof(T));
使用(var sw=new System.IO.StringWriter())
使用(var writer=XmlWriter.Create(sw))
{
serializer.Serialize(writer,source);
返回sw.ToString();
}
}

我已经很顺利地尝试了你的两个功能。我唯一改变的是这一行:

XmlSerializer xs = new XmlSerializer(typeof(pObject));
为此:

XmlSerializer xs = new XmlSerializer(pObject.GetType());

typeof()需要实际类型,而GetType()需要实际类型返回对象的类型。

@quagland:抱歉,我的问题已更正。第二个问题出现编译错误,因为我将列表作为输入参数传递。我需要此通用函数应支持所有类型。@afin:可能您没有意识到,但您不应该使用
new XmlTextWriter()
不再使用。自.NET 2.0以来,它一直被弃用,取而代之的是
XmlWriter.Create()
。您可以查看Fasterflect(),它包含一个对象的ToXml扩展方法。它是单向的,因此可能不是您所需要的,但它将适用于几乎所有对象。死链接…无法从这里获得
XmlSerializer xs = new XmlSerializer(pObject.GetType());