只是想分享一个关于 protobuf-net 的 R561 版本的观察。使用时DateTimeOffSet
,异常
InvalidOperationException(没有为类型定义序列化程序:System.DateTimeOffset)
出现:
我添加了一个带有 agetProto()
和 a的方法StreamWriter
来编写一个 proto 文件,现在它可以工作了!(而且 proto 文件也完全可用)。但是如果我评论这个方法,就会发生同样的异常。我真的不明白。
希望这个观察可能有用。
我会尽量清楚。我有一个 C# 客户端,其中包含一些使用 DateTimeOffset 参数的对象。我用 protobuf-net (r561) 对它们进行了序列化,并添加了一个 writeProtoFile() 方法来使用 getProto() 方法编写一个 proto 文件。序列化似乎工作得很好,原始文件也可以。所以因为我现在有我的 proto 文件,我可以评论或禁止 writeProtoFile() 方法:我不需要其他 proto 文件。所以这是我的第一个问题:
-> 为什么当这个方法(只是写一个调用 getProto() 方法的原型文件)被注释或抑制时,序列化不再起作用?这是我得到的例外:
没有为类型定义序列化程序:System.DateTimeOffset。
当我取消注释 writeProtoFile() 注释时,它就起作用了。这是方法:
public static void writeProtoFile(String proto)
{
StreamWriter file = new StreamWriter("c:\\MyprotoFiles\\MyProtoFile.proto");
file.Write(proto);
file.Close();
}
我需要这个对象被 java 客户端使用。使用 proto 编译器生成的 java 类似乎没问题,但是当我反序列化它时,出现异常:
com.google.protobuf.InvalidProtocolBufferException:解析协议消息时,输入意外在字段中间结束。这可能意味着输入被截断或者嵌入的消息误报了它自己的长度。
我认为,原因是生成的 DateTimeOffset 类(在原型中,dateTimeOffset 什么都不包含)
message DateTimeOffset {
}
Java 中存在 DateTimeOffset 类型,所以这是我的第二个问题:-> 有什么方法可以序列化 C# 中的 dateTimeOffset 参数,然后在反序列化后成为 java 中的 dateTimeOffset 参数?