【发布时间】:2014-01-30 23:43:08
【问题描述】:
我想编写一个 C# 客户端,通过 protobuf-net 将字符串发送到 TCP 服务器(已实现)。但是,当我尝试使用 protobuf-net 序列化字符串时,我收到了 TypeInitializerException“'Singleton' 的类型初始化程序引发了异常。”
代码如下:
public static void TelnetConnect(string host, int port) {
...
Message msg = new Message("This is a test.");
byte[] sentbytes = msg.Serialize();
...
}
[ProtoContract]
public abstract class MessageI {
public byte[] Serialize() {
byte[] result;
using (var stream = new MemoryStream()) {
Serializer.Serialize(stream, this); //THIS LINE THROWS EXCEPTION
result = stream.ToArray();
}
return result;
}
}
[ProtoContract]
public class Message : MessageI {
[ProtoMember(1)]
public string str { get; set; }
public Message(string s) {
this.str = s;
}
}
我尝试了本网站和其他网站建议的多种方法,但均未成功。我在 Visual Studio 2010 上使用 C#。
谢谢,非常感谢您的帮助。
更新:堆栈跟踪是:
at ProtoBuf.Meta.RuntimeTypeModel.get_Default()
at ProtoBuf.Serializer.Serialize[T](Stream destination, T instance)
at PingNorbertServer.MessageI.Serialize() in C:\Users\RS88517\Documents\Visual Studio 2010\Projects\PingNorbertServer\PingNorbertServer\NorbertClient.cs:line 37
at PingNorbertServer.NorbertClient.TelnetConnect(String host, Int32 port) in C:\Users\RS88517\Documents\Visual Studio 2010\Projects\PingNorbertServer\PingNorbertServer\NorbertClient.cs:line 23
at PingNorbertServer.NorbertClient.Main(String[] args) in C:\Users\RS88517\Documents\Visual Studio 2010\Projects\PingNorbertServer\PingNorbertServer\NorbertClient.cs:line 14
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
【问题讨论】:
-
我不知道 Singleton 类是什么,但它可能是 MemoryStream、Serializer 或 Message。
-
此异常通常发生在调用静态构造函数时抛出错误。您的调试器不会自动将您带入静态构造函数(可能是“Singleton”),因此您需要查看堆栈跟踪以找到真正的错误
-
谢谢,up 1。但是错误是什么?
-
请
catch异常查看.InnerException;.InnerException会告诉你发生了什么,以及为什么
标签: c# sockets serialization protobuf-net