使 XMLSerialzier 方法成为公共类

本文关键字:XMLSerialzier 方法 | 更新日期: 2023-09-27 17:55:53

我有三个类,它们通过XMLserializer方法序列化为XML数据。有没有办法使所有人都可以访问该方法,而不是在我的代码中使用三个 xmlserialize 方法。

//Here I'm writing to my class with the data that needs to be serialized                  
PERSON r = new PERSON();
Input l = new Search.Input();
INPUTSEARCHNBR ln = new INPUTSEARCHNBR();
ln.number = pnumber;                  
r.query = ln;                
string xml = doSerialization(r);
//Call the xmlserializer method 
private static string doSerialization(PERSON r)
{
    string serializedValue = string.Empty;
    try
    {
        XmlSerializer xmlSerializer = new XmlSerializer(r.GetType());
        using (MemoryStream ms = new MemoryStream())
        {
            xmlSerializer.Serialize(ms, r);
            ms.Position = 0;
            var sr = new StreamReader(ms);
            serializedValue = sr.ReadToEnd();
        }

        serializedVal = serializedValue.Replace("version='"0'"", string.Empty).Replace("<?xml version='"1.0'"?>", string.Empty).Replace("<?xml version='"1.0'" encoding='"UTF-8'"?>", string.Empty);
    }
    return serializedVal;
} 

我的代码对两个不同的类重复了两次,它写入该类,然后调用另一个 xmlserialize 方法因为该方法的输入是不同的类类型。有没有办法使该方法公开或作为类或任何其他方式,这样我就不必粘贴两个额外的方法完全相同但输入类不同的 XML序列化方法。

使 XMLSerialzier 方法成为公共类

由于您不执行任何特定于类的操作,因此可以键入object

private static string doSerialization(object r)
{
    ...

就像 chue x 说的那样,您可以使用 object 参数或使该方法通用。通用方式目前对您没有任何好处,但您可以使用它来例如只允许特定类型。

private static string doSerialization<T>(T r)
{
    // ..
}

若要仅允许自定义类型,请执行以下操作:

private static string doSerialization<T>(T r) where T : YourBaseClass
{
    // ..
}