不使用文件系统在C#中进行序列化
我有一个简单的2D字符串数组,我想将它填入MOSS中的SPFieldMultiLineText。 这映射到ntext数据库字段。
我知道我可以序列化为XML并存储到文件系统,但我想在不触及文件系统的情况下进行序列化。
public override void ItemAdding(SPItemEventProperties properties) { // build the array List<List> matrix = new List<List>(); /* * 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>)); properties.AfterProperties["myNoteField"] = s.Serialize.ToString();
但这不起作用。 我发现的所有示例都演示了写入文本文件。
StringWriter outStream = new StringWriter(); XmlSerializer s = new XmlSerializer(typeof(List>)); s.Serialize(outStream, myObj); properties.AfterProperties["myNoteField"] = outStream.ToString();
这是一个通用序列化器(C#):
public string SerializeObject(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>(matrix);
将TextWriter和TextReader类与StringWriter一起使用。
以机智:
XmlSerializer s = new XmlSerializer(typeof(whatever)); TextWriter w = new StringWriter(); s.Serialize(w, whatever); yourstring = w.ToString();
在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
IN 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); }
- 永远不会执行加载项事件
- 为什么我在尝试从正在写入的文件中读取时遇到未处理的exception:System.IO.IOException?
- MappingException:没有持久性 – NHibernate – 持久化适配器
- 将文件上载到Amazon S3中的存储桶失败并显示“达到最大重试次数”
- 如何在部分类的另一半中定义的属性上使用属性?
- 无法处理文件resx,因为它位于Internet或Restricted区域中,或者在文件上具有Web标记
- WebRequest等效于CURL命令
- 如何在C#visual studio中定义预处理器符号
- 使用.net 4.0测试程序集测试.net 3.5程序集时的风险有多大