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());