2010-04-20 44 views
7

Tôi viết thư này chức năng phổ biến để serialize các đối tượng nhất định và Danh sách < đối tượng > như sau tốtLàm thế nào để serialize Danh sách <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; } 
} 

đầu tiên đang làm việc. Nếu tôi vượt qua bất kỳ loại nào, nó sẽ trả về chuỗi xml thành công.

SỬA CHỮA: Lỗi Compilation đã xảy ra trong một giây (Lỗi:. Không thể chuyển đổi từ List<MyType> để List<object>

Tôi viết lại một giây như sau đó giải quyết vấn đề của tôi Bây giờ nó được serializing cho 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: có thể bạn không nhận ra, nhưng bạn không nên sử dụng 'new XmlTextWriter()' nữa. Nó đã bị phản đối vì lợi ích của 'XmlWriter.Create()'. Kể từ .NET 2.0. –

+0

@john: cảm ơn bạn – afin

+0

Bạn có thể kiểm tra Fasterflect (http://fasterflect.codeplex.com), bao gồm phương thức mở rộng ToXml cho các đối tượng. Đó là một chiều duy nhất và do đó có thể không phải là những gì bạn cần nhưng nó sẽ làm việc cho khá nhiều đối tượng. –

Trả lời

1

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

mã liên quan từ bài viết:

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: Cảm ơn bạn – afin

+1

liên kết đã chết ... không thể truy cập tại đây – Brian

2

Tôi đã thử hai chức năng của bạn mà không gặp nhiều rắc rối. Điều duy nhất tôi đã thay đổi là dòng này:

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

này:

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

typeof() đòi hỏi một loại thực tế trong khi GetType() trả về kiểu của đối tượng.

+0

@quagland: xin lỗi, câu hỏi của tôi đã được sửa chữa. Tôi gặp lỗi biên dịch cho lần thứ hai, vì tôi đã chuyển Danh sách làm thông số đầu vào. Tôi cần chức năng phổ biến này nên hỗ trợ tất cả các loại. – afin

Các vấn đề liên quan