不使用文件系统在C#中进行序列化

Nat*_*itt 26 c# sharepoint moss serialization wss

我有一个简单的2D字符串数组,我想把它填入MOSS中的SPFieldMultiLineText.这映射到ntext数据库字段.

我知道我可以序列化为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
}
Run Code Online (Sandbox Code Playgroud)

看起来我应该可以做这样的事情:

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

但这不起作用.我发现的所有示例都演示了写入文本文件.

Sun*_*nov 40

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


小智 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

在你的情况下你可以打电话:

    SerializeObject<List<string>>(matrix);
Run Code Online (Sandbox Code Playgroud)


Pau*_*ier 5

将TextWriter和TextReader类与StringWriter一起使用.

以机智:

XmlSerializer s = new XmlSerializer(typeof(whatever));
TextWriter w = new StringWriter();
s.Serialize(w, whatever);
yourstring = w.ToString();
Run Code Online (Sandbox Code Playgroud)