【问题标题】:Make a XMLSerialzier method a public class使 XMLSerializer 方法成为公共类
【发布时间】:2013-01-25 08:57:41
【问题描述】:

我有三个类,它们通过 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 方法 因为方法的输入是不同的类类型。 有没有办法让方法公开或作为一个类或任何其他方式,这样我就不必粘贴两个额外的 xmlserialize 方法完全相同,但输入类不同。

【问题讨论】:

    标签: c# xml class xml-serialization


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      就像 chue x 所说,您可以使用 object 参数或使方法通用。通用方式目前对您没有任何好处,但您可以将其用于例如只允许特定类型。

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

      只允许自定义类型:

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

      【讨论】:

        猜你喜欢
        • 2018-05-20
        • 2018-09-27
        • 2017-11-23
        • 2015-12-17
        • 2015-02-10
        • 2011-04-19
        • 1970-01-01
        • 2012-03-07
        相关资源
        最近更新 更多