我有一些生成的类(来自Xsd.exe),它允许我序列化/反序列化Xml。其中一个例子是生成的partial class accidents
我还有一些实用程序代码(见下文),我在另一个文件中添加了该类。问题是这个代码对于我想要使用的每个生成的类都是相同的,而不是typeof(accidents)
。
首先,似乎泛型应该可用。但我不确定我会这样做。然后我想知道,我可以通过我的分类引入一个共同的基类吗?或者还有其他一些聪明的方法吗?
public partial class accidents
{
private static System.Xml.Serialization.XmlSerializer serializer;
private static System.Xml.Serialization.XmlSerializer Serializer
{
get
{
if ((serializer == null))
{
serializer = new System.Xml.Serialization.XmlSerializer(typeof(accidents));
}
return serializer;
}
}
#region Serialize/Deserialize
/// <summary>
/// Serializes current accidents object into an XML document
/// </summary>
/// <returns>string XML value</returns>
public virtual string Serialize()
{
System.IO.StreamReader streamReader = null;
System.IO.MemoryStream memoryStream = null;
try
{
memoryStream = new System.IO.MemoryStream();
Serializer.Serialize(memoryStream, this);
memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
streamReader = new System.IO.StreamReader(memoryStream);
return streamReader.ReadToEnd();
}
finally
{
if ((streamReader != null))
{
streamReader.Dispose();
}
if ((memoryStream != null))
{
memoryStream.Dispose();
}
}
}
答案 0 :(得分:1)
我可以提供以下变体。为序列化创建一个单独的类助手。
public static class GenericSerializer
{
public static string Serialize<T>(T value)
{
using (var stringWriter = new StringWriter())
{
var serializer = new XmlSerializer(typeof(T));
serializer.Serialize(stringWriter, value);
return stringWriter.GetStringBuilder().ToString();
}
}
}
用法
var acc = new accidents();
var str = GenericSerializer.Serialize(acc);
可以从生成的类中完全删除所有支持序列化代码。