(这是我在我的RSS中看到的一个问题的重新发布,但被OP删除了.我重新添加了它,因为我已经在不同的地方多次询问过这个问题; wiki为"好"形成")
突然间,我ProtoException在反序列化时收到了一个消息:未知的线型6
我写了一个简单的TCP客户端和服务器.问题在于客户.
我在阅读服务器的整个响应时遇到了一些麻烦.我必须让线程休眠以允许发送所有数据.
我已经尝试了几次将此代码转换为一个循环,直到服务器完成发送数据.
// Init & connect to client
TcpClient client = new TcpClient();
Console.WriteLine("Connecting.....");
client.Connect("192.168.1.160", 9988);
// Stream string to server
input += "\n";
Stream stm = client.GetStream();
ASCIIEncoding asen = new ASCIIEncoding();
byte[] ba = asen.GetBytes(input);
stm.Write(ba, 0, ba.Length);
// Read response from server.
byte[] buffer = new byte[1024];
System.Threading.Thread.Sleep(1000); // Huh, why do I need to wait?
int bytesRead = stm.Read(buffer, 0, buffer.Length);
response = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("Response String: "+response);
client.Close();
Run Code Online (Sandbox Code Playgroud) 假设我有以下课程:
public class Test {
int x { get; set; }
int y { get; set; }
Vector3 coords { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我不能在来自外部程序集的类上使用[ProtoContract]和[ProtoMember(x)]属性,我该如何序列化这个对象Vector3。
我已阅读如何使用 protobuf-net 或其他序列化程序序列化 3rd 方类型?但它很模糊(例如,我不知道是否可以混合使用 TypeModel 和属性方法,或者如果我选择仅使用 TypeModel 方法等,如何将未知类型成员作为字段添加到已知类型成员中),所以我需要我的情况的一个具体例子。
例如,我像这样声明 TypeModel:
RuntimeTypeModel.Default.Add(typeof(Vector3), false).Add(1, "x").Add(2, "y").Add(3, "z");
RuntimeTypeModel.Default.Add(typeof(SerializableTestClass), false).Add(1, "_x").Add(2, "_y").Add(3, "_coords");
Run Code Online (Sandbox Code Playgroud)
序列化/反序列化:
if (GUILayout.Button("Serialize")) {
SerializableTestClass testClass = new SerializableTestClass();
testClass.changeMembers();
RuntimeTypeModel.Default.Serialize(_serializedObject, testClass);
}
if (GUILayout.Button("Deserialize")) {
SerializableTestClass test = (SerializableTestClass) RuntimeTypeModel.Default.Deserialize(_serializedObject, null, typeof(SerializableTestClass));
Debug.Log("Deserialized object: " …Run Code Online (Sandbox Code Playgroud)