2017-10-16 40 views
0

使用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)); 
} 

回答

相關問題