C# 使用带有protobuf csharp端口的文件记录和重播人类可读的protobuf消息

C# 使用带有protobuf csharp端口的文件记录和重播人类可读的protobuf消息,c#,protocol-buffers,C#,Protocol Buffers,我正在使用protobuf csharp端口,我需要能够录制一些protobuf消息以便稍后重播。XML对我来说是理想的,但只要人类能够进入文件,进行更改,然后重放文件中的消息,我就很灵活 使用此C#代码: 我生成的Requests.txt文件包含: <str>Lafayette</str> <str>Lafayette</str> <str>Lafayette</str> 只有一个MyRequest被反序列化,另外两个被

我正在使用protobuf csharp端口,我需要能够录制一些protobuf消息以便稍后重播。XML对我来说是理想的,但只要人类能够进入文件,进行更改,然后重放文件中的消息,我就很灵活

使用此C#代码:

我生成的Requests.txt文件包含:

<str>Lafayette</str>
<str>Lafayette</str>
<str>Lafayette</str>
只有一个
MyRequest
被反序列化,另外两个被忽略。(构建
reqFromFile
后,
input.isattend==true

回到我的问题:有没有办法从一个文件中读取多条人类可读的protobuf消息

回到我的问题:有没有办法从一个文件中读取多条人类可读的protobuf消息

您当前正在创建一个包含多个根元素的单一文本文件-它不是有效的XML文件

最简单的方法可能是创建一个包含所有这些请求的XML文档,然后加载它(例如使用LINQ to XML),并在每个根元素的子元素处创建一个
XmlReader
。然后,这些
XmlReader
对象中的每一个都应该能够反序列化为单个protobuf消息

回到我的问题:有没有办法从一个文件中读取多条人类可读的protobuf消息

您当前正在创建一个包含多个根元素的单一文本文件-它不是有效的XML文件

最简单的方法可能是创建一个包含所有这些请求的XML文档,然后加载它(例如使用LINQ to XML),并在每个根元素的子元素处创建一个
XmlReader
。每个
XmlReader
对象都应该能够反序列化为单个protobuf消息。

您可以查看

另外还有谷歌自己的文本格式,有点像JSon。您可以使用protoc命令在2之间进行转换(查看编码/解码选项,您还需要proto定义)

您可以查看


另外还有谷歌自己的文本格式,有点像JSon。您可以使用protoc命令在2之间进行转换(查看编码/解码选项,您还需要proto定义)

。如果我们使用Java,我会更仔细地观察。如果我们使用Java,我会更仔细地观察。
<str>Lafayette</str>
<str>Lafayette</str>
<str>Lafayette</str>
        var xmlReaderSettings = new XmlReaderSettings
        {
            ConformanceLevel = ConformanceLevel.Fragment
        };

        using (var xmlReader = XmlReader.Create(@"Requests.txt", xmlReaderSettings))
        {
            ICodedInputStream input = XmlFormatReader.CreateInstance(xmlReader);
            MyRequest reqFromFile;

            while(!input.IsAtEnd)
            {
                reqFromFile =
                    ReverseRequest.CreateBuilder().MergeFrom(input).Build();
            }
        }