只是想分享關於protobuf-net的R561版本的觀察。當使用DateTimeOffSet
,異常protobuf datetimeoffset
InvalidOperationException異常(否類型定義的串行化器: System.DateTimeOffset)
出現:
我添加的方法與getProto()
和StreamWriter
寫原型文件,現在它可以工作!(原始文件也完全可用)。但是如果我評論這種方法,就會發生同樣的異常。我真的不明白。
希望這個觀察可能有用。
我會盡量做得更清楚。我有一個C#客戶端,其中有一些使用DateTimeOffset參數的對象。我使用protobuf-net(r561)對它們進行了序列化,並添加了一個writeProtoFile()方法來使用getProto()方法編寫proto文件。序列化似乎完美,原始文件也可以。所以,因爲我現在有我的原始文件,所以我可以評論或抑制writeProtoFile()方法:我不需要其他原始文件。所以這裏是我的第一個問題:
- >爲什麼當這個方法(這只是寫一個調用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 {
}
類型的DateTimeOffset存在於Java,所以這裏是我的第二個問題: - >有沒有什麼辦法, C#中的dateTimeOffset參數可以被序列化,然後,在反序列化之後,可以在java中使用dateTimeOffset參數?
這個例外很簡單:確實,我沒有加入對此的支持。我不明白你的最後一段 – 2012-08-17 15:09:11
你能否澄清這裏是否有問題?否則,我應該關閉它作爲「不是一個真正的問題」... – 2012-08-17 21:04:11