我想将对象序列化为字符串,然后返回.
我们使用protobuf-net将对象转换为Stream并成功返回.
但是,Stream to string and back ...不太成功.经过StreamToString并且StringToStream,新Stream的没有被protobuf-net反序列化; 它提出了一个Arithmetic Operation resulted in an Overflow例外.如果我们反序列化原始流,它可以工作.
我们的方法:
public static string StreamToString(Stream stream)
{
stream.Position = 0;
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
public static Stream StringToStream(string src)
{
byte[] byteArray = Encoding.UTF8.GetBytes(src);
return new MemoryStream(byteArray);
}
Run Code Online (Sandbox Code Playgroud)
我们的示例代码使用这两个:
MemoryStream stream = new MemoryStream();
Serializer.Serialize<SuperExample>(stream, test);
stream.Position = 0;
string strout = StreamToString(stream);
MemoryStream result = (MemoryStream)StringToStream(strout);
var other = …Run Code Online (Sandbox Code Playgroud) 我的应用程序尝试反序列化客户端发送的数据,但失败并出现以下错误:
抛出异常:mscorlib.dll中的"System.Runtime.Serialization.SerializationException"
附加信息:无法获得成员'<.ctor> b__0'.
谷歌搜索没有结果.好吧,我决定进入反序列化逻辑,并试图找出导致这种情况的原因.嗯,有一天过去了,我离我很近了.
我使用Microsoft Reference Source网站上的说明来配置Visual Studio.它下载了一些东西
MicrosoftPublicSymbols\mscorlib.pdb\
DCF1E4D31F6944AC87E7A634262BEE881\mscorlib.pdb (780kb)
E47257B512BA49BC9FC367C532FC5F1E2\mscorlib.pdb (953kb)
Run Code Online (Sandbox Code Playgroud)
但是调试器没有介入.
我google了更多,并找到了另一种方法 - 安装dotTrace应用程序并将其用作源服务器.这也无济于事.我仍然看到以下内容:
Symbol Load Information mscorlib.pdb的弹出窗口说
C:\ Users\me\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols\mscorlib.pdb\e47257b512ba49bc9fc367c532fc5f1e2\mscorlib.pdb:已加载符号.
我可以介入System.Windows.Forms,System.Linq等 - 所以一般来说,它可以工作 - 它只是这个特定的调用BinaryFormatter.Deserialize()不起作用.可能是什么原因以及如何让它进入?
可能是因为SecuritySafeCritical属性?
[System.Security.SecuritySafeCritical]
public Object Deserialize(Stream serializationStream)
Run Code Online (Sandbox Code Playgroud)
我正在使用VS 2015 .Net 4.5.2(虽然我试过4.5但结果相同).
我有一个包含a的类List<Func<T>>.该类是可序列化的,将通过WCF传输.现在,我遇到了问题List<Func<T>>.我该怎么做才能将这个列表序列化?