有什么方法可以将google protobuf消息转换为带有缩进的json?

Dor*_* Do 8 c# indentation protocol-buffers

我需要使用 C#将Google protobuf IMessage 对象保存到 json 文件中。这是示例代码:

using (var input = File.OpenRead(protodatFile)) 
{
    string jsonString = null;
    message.MergeFrom(input); //read message from protodat file
    JsonFormatter formater = new JsonFormatter(
        new JsonFormatter.Settings(false));
    jsonString = formatter.Format(message);
    System.IO.File.WriteAllText(jsonFile, jsonString);
}
Run Code Online (Sandbox Code Playgroud)

这使用JsonFormatter来自 Google Protobuf 库的

问题:所有 json 内容都存储在一行中。当文件很大(> 50 MB)时,很难在文本编辑器中打开/查看。

在这里制作缩进 jsonFile 的最佳方法是什么?

Mar*_* Ba 6

作为一种效率极低的解决方法,可以使用 Json.NET 重新格式化 Protobuffer Json:

// Re-Parse the one-line protobuf json string into an object:
object parsed = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);
// Format this object as JSON with indentation:
string jsonWithIndent = Newtonsoft.Json.JsonConvert.SerializeObject(parsed, Newtonsoft.Json.Formatting.Indented);
Run Code Online (Sandbox Code Playgroud)

由于最初的问题询问的是 50MB 文件,对于如此大的文件来说,这可能是一个糟糕的解决方案,但考虑到我在JsonFormatter.Settings上找不到任何内容,这就是我所寻求的。