Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#程序中使用Protobuf vs JSON而不是XML?_C#_Json_Xml_Serialization_Protobuf Net - Fatal编程技术网

在C#程序中使用Protobuf vs JSON而不是XML?

在C#程序中使用Protobuf vs JSON而不是XML?,c#,json,xml,serialization,protobuf-net,C#,Json,Xml,Serialization,Protobuf Net,在我的公司,我们有一个程序,可以从设备读取数据,然后将数据写入XML文件,这些文件采用XSLT文件样式,并呈现给最终用户。 在读取的数据变得更大之前,一切都很好,目前我们甚至计划拥有更多的数据,XML将不足以处理所有这些数据。 现在我们应该采用Protobuf或JSON而不是XML来存储从设备读取的数据,并存储要写入设备的配置文件。Protobuf对我们的好处是: 1-比JSON快 2-更小的尺寸 然而,有人提出了一些问题,我们正在寻找解决方案: 1-Protobuf文件的可编辑性不如XML和J

在我的公司,我们有一个程序,可以从设备读取数据,然后将数据写入
XML
文件,这些文件采用
XSLT
文件样式,并呈现给最终用户。

在读取的数据变得更大之前,一切都很好,目前我们甚至计划拥有更多的数据,
XML
将不足以处理所有这些数据。

现在我们应该采用
Protobuf
JSON
而不是
XML
来存储从设备读取的数据,并存储要写入设备的配置文件。
Protobuf
对我们的好处是:

1-比JSON快 2-更小的尺寸

然而,有人提出了一些问题,我们正在寻找解决方案:

1-
Protobuf
文件的可编辑性不如
XML
JSON
那么简单 以二进制格式存储,并且它不是人类可读的
2-如果 正在读取的数据的结构因任何原因被更新(添加 例如,更多字段)这会影响向后兼容性吗 读取旧文件的步骤
3-是否有一种方法可以使用
Xslt

  • 事实上,你不想手工编辑它们;不过,通过代码编写脚本应该可以
  • 添加字段是完全向后兼容的。删除字段也是如此。协议的设计考虑了版本控制。您不能做的是更改现有字段的存储方式—有些类型更改可以,有些类型更改会立即中断,有些类型更改会自动中断(例如,从unsigned改为signed)
  • 不直接;不过,任何通用的UI/数据绑定API都应该可以工作

  • 这是你的问题:“3-有没有办法用Xslt为protobuf文件(如Xml)设置样式”如果是这样,你可能想说得更清楚,因为它隐藏在大量的介绍性文本中。没有,我的问题是我是否应该将protobuf与相关的givensWell一起使用,这在很大程度上取决于您自己的情况和维护解决方案的能力。当然有人在使用Protobuf,他们有自己的理由,所以这是一个是否适合你的问题,根据给出的信息,我们没有人能回答这个问题。这个问题非常主观,不适合基于的堆栈溢出。我建议问一个更具体的、客观的问题,把EXI作为另一个选择。我猜想它将给您带来与Protobuf相同的所有好处,其优点是EXI与XML具有相同的数据模型,因此易于无损地转换为XML,这意味着更改对现有工具链的破坏性要小得多。对于大型XML文件,您应该在Net中使用XmlReader()类。使用XmlReader,我通常使用XMLLINQ一次阅读一节。请参阅以下帖子中的我的解决方案: