当前位置: 首页 > 知识库问答 >
问题:

通过网络序列化对象

乌和畅
2023-03-14

我阅读了有关通过网络发送序列化对象的好处的文章。性能和尺寸成本。

有些解释了DataContract和使用JSON或XML序列化。

但是我找不到关于如果我不使用这些属性会发生什么的文章,并且我返回一个对象,假设我的对象的属性和状态是基本类型。显然,当我具体使用DataContractJsonSerializer之类的序列化程序及其WriteObject方法时,它会抛出一个异常

例如,如果我在Web服务方法中返回一个具有属性“可序列化”的员工类型对象,会发生什么。我的意思是. net会如何处理这个结果。

[WebMethod]
public Employee SendEmployeeData()
{
}

对象将通过网络作为二进制流发送还是什么?

通过网络发送一个对象需要序列化吗?

我还读到Data合同序列化器将解释序列化属性。

中DataContract属性和Serializable属性之间的差异。网

共有2个答案

谷森
2023-03-14

如果我没记错的话,DataContractSerializer非常明确地要求对所有需要序列化的属性和对象进行属性注释。不过,我可能错了:我已经有一段时间没用过它了。

它们绝对不会使用二进制格式化程序自动序列化。属性只是一个标记,用于指示二进制格式化程序序列化对象。

Json.NET(我在评论中引用过)将使用反射来构建给定对象的序列化结构 - 甚至是动态对象。以下代码将使用 JSON.net 构造一个动态对象并将其转换为 JSON 字符串:

//build request
var dynamicObject = new {
    message = "Hello World",
    number = 32,
    date = DateTime.Now
};

//convert to JSON string
string json = JsonConvert.SerializeObject(dynamicObject);
Console.WriteLine(json);
傅毅然
2023-03-14

我的意思是.net会如何处理这个结果。

这将完全取决于您正在使用的框架/框架。WCF的工作方式与ASMX不同,ASMX的工作方式与MVC不同,后者将……等等等等。

该对象将通过网络作为二进制流或其他方式发送?

对TCP流是流

通过网络发送一个对象需要序列化吗?

是的;您只能通过数据发送一系列字节;将对象转换为一系列字节的过程称为序列化。

我还读到Data合同序列化器将解释序列化属性。

良好的...有几分地...不过,这并不是一个很好的用法,它类似于使用< code>BinaryFormatter(它可能使用< code > NetDataContractSerializer ,但是它有大多数相同的问题)-基本上:不要这样做。如果您使用的API旨在交换数据契约,请使用数据契约。这里没有“最佳”方法;这一切都归结于你正在努力做什么,你的优先事项是什么。与< code>BinaryFormatter等相比,JSON和XML具有互操作性优势,但也有其他选项具有相同的优势。

 类似资料:
  • 问题内容: 只是想知道是否存在用于序列化对象,将其放入网络流并在另一端反序列化的教程或方法。我了解序列化,I / O,流,套接字等的原理,我只想举一个客户端向服务器发送对象的示例。 问题答案: 这(PDF)是指导您完成序列化的基础知识,及插座一个有用的教程,然后绑两个概念放在一起(大约一半通过幻灯片)来说明如何序列化对象,并从客户端发送到服务器(无RMI )。我认为这正是您想要的。

  • 问题内容: 在我的数据模型中,我可以达到以下目的: 我已经可以序列化了,但是我需要序列化。本质上,我需要的是这样的: 有没有办法在JAXB批注中执行此操作而不修改我的模型? 问题答案: 您可以在此用例中使用: 该登记在使用类注释: 走得更远 除了创建新的实例外,我们还可以使用从数据库查询相应的实例。我们将更改为如下所示: 现在设置的情况下我们的,我们可以做到以下几点:

  • 我试图通过Kotlin使用Jackson对lastfm api提供的xml进行反序列化。我用JAXB在Java中实现了这一点,我正在尝试移植它。除以下示例中的“未包装列表”字段外,所有功能都正常工作。我知道Track数据类正在工作,因为如果我使用而不是

  • git 提供相当灵活的协作方式,最常见的方式为:协作者获得原始版本库的镜像,并在上面工作;发起者从协作者那里获取更新 协作者通过git clone创建一个镜像版本库: git clone user@url:~/path [local] 网络对于 git 来说是透明的,凡是可以访问的位置,如 http、ftp、ssh……,甚至本地路径,对于 git 来说没有什么区别。 通过以下命令,创建一个本机原

  • 我试图通过CLI反序列化保存为protobuf的文件(似乎是最容易做到的事情)。我不希望使用protoc进行编译,将其导入编程语言,然后读取结果。 我的用例:一个TensorFlow lite工具以原型格式输出了一些数据。我也在TensorFlow存储库中找到了原型定义。我只想快速阅读输出。具体来说,我正在从工具中获取消息。

  • 我所在的团队使用杰克逊数据绑定来处理发送到 REST API 和从 REST API 发送的 JSON 的序列化和反序列化。该 API 广泛使用一种臭名昭著且难以处理的模式,我们称之为“键值”。不幸的是,JSON的格式超出了我们的控制范围,所以我试图找到一种简单易行的好方法来处理序列化和反序列化它们。 键值总是以下列模式出现: 值得注意的是,它们始终采用数组的形式,其中包含单个对象,并且对象中 k