Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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#中二进制格式的元数据信息?_C#_.net - Fatal编程技术网

如何获取我的对象';C#中二进制格式的元数据信息?

如何获取我的对象';C#中二进制格式的元数据信息?,c#,.net,C#,.net,我正在从一个用Python运行的应用程序接收二进制流 从二进制流中,我想创建一个位于字节数组中的流中的C#对象 如何反序列化对象并从二进制流中检索对象 我们可以忽略它是一个python应用程序。我更感兴趣的是二进制流是如何工作的。您似乎认为所有语言都自动使用相同的序列化方案 事实并非如此 这在理论上甚至是不可能的,因为不同的编程语言对对象的含义有不同的概念 如果您对如何在C#中读取Python序列化流特别感兴趣,请询问。否则,这个问题是无法回答的,因为它基于一个错误的前提 后续-出于好奇,

我正在从一个用Python运行的应用程序接收二进制流

从二进制流中,我想创建一个位于字节数组中的流中的C#对象

如何反序列化对象并从二进制流中检索对象


我们可以忽略它是一个python应用程序。我更感兴趣的是二进制流是如何工作的。

您似乎认为所有语言都自动使用相同的序列化方案

  • 事实并非如此

  • 这在理论上甚至是不可能的,因为不同的编程语言对对象的含义有不同的概念

如果您对如何在C#中读取Python序列化流特别感兴趣,请询问。否则,这个问题是无法回答的,因为它基于一个错误的前提


后续-出于好奇,我在C#中搜索了一个Python pickle阅读器。搜索结果的前3页中没有任何内容。。。尽管有C++中的一个泡菜读取器的引用。 C#对象

C#没有对象;它是一个.Net对象

其次,我们绝对不能忽略它是一个Python应用程序,因为这意味着它可能没有在.Net上运行,因此.Net二进制格式不是Python运行时的本机格式。这并不是说在这种情况下,.Net序列化不可能对您可用,因为如果您正在运行,那么您可以从中简单地使用二进制序列化API并获取序列化的.Net对象

但是,如果是在不同平台上运行的Python,那么您可以解码二进制流中的信息,为此您需要知道格式,并直接到马口处阅读

当然,这将需要(相当多)更多的工作


如果您正在处理的项目允许您更改原始对象的序列化方式,那么我强烈建议您改为XML序列化或类似的方式,这是为了便于移植而设计的。

仅为您添加一些一般信息:

在C#/.Net中,有一种将对象序列化为非二进制形式的通用方法,因为二进制形式需要大量类似于协议的头来包含元数据,这使得接收方必须非常了解.Net/CLR内部结构

相反,今天,对象通常被序列化为XML(当类型信息非常重要时)或JSON格式(当只有数据重要时),因此任何接收者都可以非常容易地读取它们,而且更频繁的是,任何第三方都可以很容易地生成新的类似对象的数据,我们的应用程序可能“只是反序列化”,不管是谁生成的,在什么平台上生成的


但是,仍然使用二进制序列化。XML/JSON数据即使经过压缩,通常也比二进制图像大。然而,当我们希望数据不发布到外部世界时,或者如果我们神奇地知道只有在.Net上使用我们的程序集才能对其进行处理时,就严格使用二进制序列化。“我们可以忽略它是python应用程序。”->删除了
python
标记。:-)你说的“二进制流如何工作”是什么意思?你把字节写到流中,然后再读回来。为什么这个标签是Java?当我读它的时候,我怎么才能得到二进制流中序列化的对象的元数据信息呢?@StephenC投了赞成票的人-我不能把评论的目标对准任何人,所以只写了一个一般性的评论