2008-11-19 69 views
26

我有一個簡單的二維數組字符串,我想將它填充到MOSS中的SPFieldMultiLineText中。這映射到ntext數據庫字段。在C#中使用不使用文件系統的序列化

我知道我可以序列化到XML並存儲到文件系統,但我想序列化而不接觸文件系統。

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 
} 

看起來我應該能夠做這樣的事情:

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

,但不起作用。我找到的所有示例都演示了寫入文本文件。

回答

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

在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 

在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

通過一個字節數組去?哎喲。 – bzlm 2009-02-20 09:34:53

5

使用的TextWriter和TextReader的類與StringWriter的。

即:

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

這裏有一個通用串行器(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(); 
     } 
    } 

在你的情況,你可以用撥打:

SerializeObject<List<string>>(matrix);