使用Google.Protobuf NuGet包版本3.4.1爲什麼在protobuf3知名類型的JSON反序列化過程中拋出異常?
最簡單的形式,我有這樣的定義谷歌的協議緩衝區消息:使用谷歌的protoc工具
syntax = "proto3";
package tests;
option csharp_namespace = "MyTests";
import "wrappers.proto";
message Foo {
.google.protobuf.Int32Value NullableInt = 1;
}
我把它編譯成C#代碼來自Google.Protobuf.Tools 3.4.0版。
當我實例化Foo的一個實例並使用Google.Protobuf.JsonFormatter將它序列化爲一個字符串時,我得到一個合理的結果,即「{」NullableInt「:5}」。當我使用Google.Protobuf.JsonParser將此反序列化爲Foo實例時,解析器拋出一個System.InvalidCastException,聲明「無法強制類型爲'System.Int32'的對象來鍵入'Google.Protobuf.WellKnownTypes.Int32Value'。 「
爲什麼拋出此異常?我在做一些愚蠢的事情嗎?
這裏是我運行的代碼:
[Test]
public void TestRoundTripInt32Value()
{
var foramtter = new JsonFormatter(new JsonFormatter.Settings(false));
var foo = new Foo { NullableInt = new Int32Value {Value = 5} };
var str = foramtter.Format(foo);
Console.WriteLine(str);
var parser = new JsonParser(new JsonParser.Settings(100));
var foo2 = parser.Parse<Foo>(str); // <= Throws!
Assert.That(foo2, Is.EqualTo(foo));
}