protobuf-net の R561 バージョンに関する所見を共有したかっただけです。を使用する場合DateTimeOffSet
、例外
InvalidOperationException (型のシリアライザーが定義されていません: System.DateTimeOffset)
表示されます:
getProto()
aと aを使用して proto ファイルを作成するメソッドを追加したところ、StreamWriter
動作するようになりました (さらに、proto ファイルも完全に使用可能になりました)。しかし、このメソッドをコメントすると、同じ例外が発生します。私は本当にそれを取得しません。
この観察が役立つことを願っています。
私はより明確にしようとします。DateTimeOffset パラメーターを使用するいくつかのオブジェクトを持つ C# クライアントがあります。それらを protobuf-net (r561) でシリアライズし、メソッド getProto() で proto ファイルを書き込む writeProtoFile() メソッドを追加しました。シリアル化は完全に機能しているようで、proto ファイルも問題ありません。したがって、proto ファイルができたので、メソッド writeProtoFile(): をコメントまたは抑制できます。他の proto ファイルは必要ありません。だからここに私の最初の質問があります:
-> このメソッド (getProto() メソッドを呼び出す proto ファイルを書き込むだけ) がコメント化または抑制されていると、シリアライゼーションが機能しなくなるのはなぜですか? これが私が得た例外です:
型のシリアライザーが定義されていません: 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 クラスにあると思います (proto では、dateTimeOffset には何も含まれていません)。
message DateTimeOffset {
}
タイプ DateTimeOffset は Java に存在するので、ここに私の 2 番目の質問があります。