sharp que programacion lenguaje historia caracteristicas c# sharepoint serialization moss wss

que - Serialización en C#sin usar el sistema de archivos



lenguaje de programacion c# caracteristicas (4)

Tengo un conjunto simple de cadenas en 2D y me gustaría incluirlo en un SPFieldMultiLineText en MOSS. Esto se asigna a un campo de base de datos ntext.

Sé que puedo serializar en XML y almacenar en el sistema de archivos, pero me gustaría serializar sin tocar el sistema de archivos.

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 }

Parece que debería poder hacer algo como esto:

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

pero eso no funciona. Todos los ejemplos que he encontrado demuestran escribir en un archivo de texto.


Aquí hay un serializador genérico (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(); } }

En tu caso, podrías llamar con:

SerializeObject<List<string>>(matrix);


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


Use las clases TextWriter y TextReader con StringWriter.

Esto es:

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


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