.Net Protocol Buffers to JSON,JsonFormatReader class 不处理最外面的花括号?
.Net Protocol Buffers to JSON, JsonFormatReader class does not handle outmost curly braces?
我正在使用 Google 协议缓冲区,使用 protobuf-csharp-port 库 (https://code.google.com/p/protobuf-csharp-port/)。
Google.ProtocolBuffers.Serialization class 有一个 JsonFormatReader
/ JsonFormatWriter
class,当我使用它们时,它们不会将开始和结束的花括号放在 JSON文档,如果我添加开始和结束大括号,他们也无法阅读他们编写的同一份文档。
例如调用
PB.ProtoBufMessage message = CreateMyMessage();
string json;
using (StringWriter sw = new StringWriter())
{
ICodedOutputStream output = JsonFormatWriter.CreateInstance(sw);
message.WriteTo(output);
output.Flush();
json = sw.ToString();
}
创建:
"\"field1\":\"prop1\",\"field2\":1,\"subitem\":{\"x\":0,\"y\":0,\"z\":0}"
如果我尝试解析
String jsonmessage = "{\"field1\":\"prop1\",\"field2\":1,\"subitem\":{\"x\":0,\"y\":0,\"z\":0}}"
使用
PB.ProtoBufMessage copy;
ICodedInputStream input = JsonFormatReader.CreateInstance(jsonmessage);
copy = PB.ProtoBufMessage.CreateBuilder().MergeFrom(input).Build();
我得到以下信息:
(1:1) error: Unexpected token '{', expected: '"'.
at Google.ProtocolBuffers.Serialization.JsonCursor.Assert(Boolean cond, Char expected)
at Google.ProtocolBuffers.Serialization.JsonCursor.Consume(Char ch)
at Google.ProtocolBuffers.Serialization.JsonCursor.ReadString()
at Google.ProtocolBuffers.Serialization.JsonFormatReader.PeekNext(String& field)
at Google.ProtocolBuffers.Serialization.AbstractReader.Google.ProtocolBuffers.ICodedInputStream.ReadTag(UInt32& fieldTag, String& fieldName)
at ...
为什么缺少 { },这是否有效 JSON?
您需要write/read留言start/end。卢克:
output.WriteMessageStart();
message.WriteTo(output);
output.WriteMessageEnd();
阅读时的相似度:
input.ReadMessageStart();
builder.MergeFrom(input);
input.ReadMessageEnd();
以上代码适用于 json 和二进制 reader/writers。
我正在使用 Google 协议缓冲区,使用 protobuf-csharp-port 库 (https://code.google.com/p/protobuf-csharp-port/)。
Google.ProtocolBuffers.Serialization class 有一个 JsonFormatReader
/ JsonFormatWriter
class,当我使用它们时,它们不会将开始和结束的花括号放在 JSON文档,如果我添加开始和结束大括号,他们也无法阅读他们编写的同一份文档。
例如调用
PB.ProtoBufMessage message = CreateMyMessage();
string json;
using (StringWriter sw = new StringWriter())
{
ICodedOutputStream output = JsonFormatWriter.CreateInstance(sw);
message.WriteTo(output);
output.Flush();
json = sw.ToString();
}
创建:
"\"field1\":\"prop1\",\"field2\":1,\"subitem\":{\"x\":0,\"y\":0,\"z\":0}"
如果我尝试解析
String jsonmessage = "{\"field1\":\"prop1\",\"field2\":1,\"subitem\":{\"x\":0,\"y\":0,\"z\":0}}"
使用
PB.ProtoBufMessage copy;
ICodedInputStream input = JsonFormatReader.CreateInstance(jsonmessage);
copy = PB.ProtoBufMessage.CreateBuilder().MergeFrom(input).Build();
我得到以下信息:
(1:1) error: Unexpected token '{', expected: '"'.
at Google.ProtocolBuffers.Serialization.JsonCursor.Assert(Boolean cond, Char expected)
at Google.ProtocolBuffers.Serialization.JsonCursor.Consume(Char ch)
at Google.ProtocolBuffers.Serialization.JsonCursor.ReadString()
at Google.ProtocolBuffers.Serialization.JsonFormatReader.PeekNext(String& field)
at Google.ProtocolBuffers.Serialization.AbstractReader.Google.ProtocolBuffers.ICodedInputStream.ReadTag(UInt32& fieldTag, String& fieldName)
at ...
为什么缺少 { },这是否有效 JSON?
您需要write/read留言start/end。卢克:
output.WriteMessageStart();
message.WriteTo(output);
output.WriteMessageEnd();
阅读时的相似度:
input.ReadMessageStart();
builder.MergeFrom(input);
input.ReadMessageEnd();
以上代码适用于 json 和二进制 reader/writers。