2010-04-20 16 views
7

我寫常用功能序列化給定對象名單<對象>如下如何序列名單<object>

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; } 
} 

第一個是工作的罰款。如果我傳遞任何類型,它成功返回xml字符串。

更正:發生編譯錯誤的第二個(錯誤:無法從List<MyType>轉換爲List<object>

我重寫了第二個如下解決了我的問題,現在它被序列化給定List<generic types>

private string SerializeObject<T>(T source) 
{ 
    MemoryStream memoryStream = new MemoryStream(); 
    XmlSerializer xs = new XmlSerializer(typeof(T)); 
    XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
    xs.Serialize(xmlTextWriter, source); 
    memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
    string XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); 
    return XmlizedString; 
} 
+2

@afin:也許你沒有意識到,但你不應該再使用'new XmlTextWriter()'。它已被棄用,以支持'XmlWriter.Create()'。自.NET 2.0以來。 – 2010-04-21 01:01:52

+0

@john:謝謝 – afin 2010-04-21 01:05:23

+0

您可以查看Fasterflect(http://fasterflect.codeplex.com),其中包含對象的ToXml擴展方法。它只是單向的,所以可能不是你所需要的,但它幾乎適用於每一個對象。 – 2010-04-21 01:45:20

回答

1

https://weblogs.asp.net/rajbk/Contents/Item/Display/345

從文章的相關代碼:

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(); 
    } 
} 
+0

@Raj:謝謝 – afin 2010-04-21 01:06:36

+1

死鏈接...無法從這裏得到 – Brian 2014-07-16 13:22:25

2

我已經嘗試過你的兩個功能,沒有太大麻煩。我唯一改變的是這一行:

XmlSerializer xs = new XmlSerializer(typeof(pObject)); 

這樣:

XmlSerializer xs = new XmlSerializer(pObject.GetType()); 

的typeof()需要一個實際的類型,而getType()返回對象的類型。

+0

@quagland:對不起,我的問題已更正。因爲我通過了列表作爲輸入參數,所以我得到了第二個編譯錯誤。我需要這個通用功能應該支持所有類型。 – afin 2010-04-21 00:45:31