我有一些生成的类(来自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();
}
}
}
我可以提供以下变体。为序列化创建一个单独的类帮助程序。
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);
所有支持的序列化代码都可以从生成的类中完全删除。