protobuf-csharp-port ライブラリ ( https://code.google.com/p/protobuf-csharp-port/ )を使用して、Google Protocol Buffers の使用に取り組んでいます。Google.ProtocolBuffers.Serialization クラスにはJsonFormatReader
/JsonFormatWriter
クラスがあります。それらを使用すると、JSON ドキュメントに開始中括弧と終了中括弧を配置しません。また、開始中括弧と終了中括弧を追加すると、記述した同じドキュメントを読み取ることもできません。
たとえば、Calling
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 ですか?