2008-11-19 10 views
26

Tôi có một chuỗi chuỗi 2D đơn giản và tôi muốn nhồi nó vào một SPFieldMultiLineText trong MOSS. Bản đồ này đến một trường cơ sở dữ liệu ntext.Nối tiếp trong C# mà không sử dụng hệ thống tệp

Tôi biết tôi có thể tuần tự hóa thành XML và lưu trữ vào hệ thống tệp nhưng tôi muốn tuần tự hóa mà không cần chạm vào hệ thống tệp.

public override void ItemAdding(SPItemEventProperties properties) 
{ 
    // build the array 
    List<List<string>> matrix = new List<List<string>>(); 
    /* 
    * populating the array is snipped, works fine 
    */ 
    // now stick this matrix into the field in my list item 
    properties.AfterProperties["myNoteField"] = matrix; // throws an error 
} 

Hình như tôi sẽ có thể làm điều gì đó như thế này:

XmlSerializer s = new XmlSerializer(typeof(List<List<string>>)); 
properties.AfterProperties["myNoteField"] = s.Serialize.ToString(); 

nhưng điều đó không làm việc. Tất cả các ví dụ tôi đã tìm thấy chứng minh bằng văn bản cho một tập tin văn bản.

Trả lời

40
StringWriter outStream = new StringWriter(); 
XmlSerializer s = new XmlSerializer(typeof(List<List<string>>)); 
s.Serialize(outStream, myObj); 
properties.AfterProperties["myNoteField"] = outStream.ToString(); 
2

TRÊN VB.NET

Public Shared Function SerializeToByteArray(ByVal object2Serialize As Object) As Byte() 
    Using stream As New MemoryStream 
     Dim xmlSerializer As New XmlSerializer(object2Serialize.GetType()) 
     xmlSerializer.Serialize(stream, object2Serialize) 
     Return stream.ToArray() 
    End Using 
End Function 

Public Shared Function SerializeToString(ByVal object2Serialize As Object) As String 
    Dim bytes As Bytes() = SerializeToByteArray(object2Serialize) 
    Return Text.UTF8Encoding.GetString(bytes) 
End Function 

TRÊN C#

public byte[] SerializeToByteArray(object object2Serialize) { 
     using(MemoryStream stream = new MemoryStream()) { 
      XmlSerializer xmlSerializer = new XmlSerializer(object2Serialize.GetType()); 
      xmlSerializer.Serialize(stream, object2Serialize); 
      return stream.ToArray(); 
     } 
} 

public string SerializeToString(object object2Serialize) { 
    byte[] bytes = SerializeToByteArray(object2Serialize); 
    return Text.UTF8Encoding.GetString(bytes); 
} 
+0

Đi qua một mảng byte? Ouch. – bzlm

+0

Một trong những khả năng. Có một số cách để làm điều đó! Nếu bạn có một xuất bản tốt hơn nó! Và tôi sẽ upvote nếu nó có giá trị nó. – JSC

5

Sử dụng TextWriter và các lớp TextReader với StringWriter.

Để Wit:

XmlSerializer s = new XmlSerializer(typeof(whatever)); 
TextWriter w = new StringWriter(); 
s.Serialize(w, whatever); 
yourstring = w.ToString(); 
12

Dưới đây là một serializer Generic (C#):

public string SerializeObject<T>(T objectToSerialize) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 
     MemoryStream memStr = new MemoryStream(); 

     try 
     { 
      bf.Serialize(memStr, objectToSerialize); 
      memStr.Position = 0; 

      return Convert.ToBase64String(memStr.ToArray()); 
     } 
     finally 
     { 
      memStr.Close(); 
     } 
    } 

Trong trường hợp của bạn, bạn có thể gọi với:

SerializeObject<List<string>>(matrix);