通过 JSON 发送复杂对象,然后在另一台电脑上重建它



我可以使用 JSON 将复杂对象从一台 PC 发送到另一台 PC 吗?

根据我对 JSON 的理解,您可以字符串化该对象,然后将字符串发送到另一台 PC,然后将其取消字符串化并再次重建对象。

但是现在它怎么知道我发送了什么对象?因为我可以发送它对象 A 或对象 B?

有没有办法找出我发送了什么对象?或者 JSON 的一部分是否知道您将接收什么类型的对象?

我可以使用 JSON 将复杂对象从一台电脑发送到另一台电脑吗?

是的

但是现在它怎么知道我发送了什么对象?因为我可以 发送它对象 A 还是对象 B ?

接收方知道何时反序列化 Json。接收方需要知道 JSON 的外观,或者如果它不知道,则需要动态反序列化它。请参阅有关动态反序列化的 SO 答案。

dynamic something = JsonConvert.DeserializeObject(json);

如果作为客户端,你使用像Spring RestTemplate这样的类的实例,你可以告诉它应该期望JSon成为哪个类的实例,并相应地转换它。

http://www.springframework.net/rest/doc-latest/reference/html/resttemplate.html

JSON 数据的字符串表示形式。

您要么知道对方的期望,要么需要发送额外的元数据。

很多时候,您确切地知道发送了哪种对象。

添加额外的元数据可以很容易地自动完成(我相信有很多可用的库):

{
  class: A
  entity: {...}
}

但是现在它怎么知道我发送了什么对象?因为我可以 发送它对象 A 还是对象 B ?

另一方应该意识到 JSON 对象已以字符串格式接收,因此要正确解析或反序列化它,就像以下示例一样,它采用 JSON 字符串并将其解析JSON 或 C# 对象:

在 JavaScript 中:

var jsonObj = JSON.parse(yourJsonString);

在 C# 中:

dynamic jsonObj = JsonConvert.DeserializeObject(yourJsonString);

此外,如果是 HTTP 请求,则可以将内容类型指定为:application/json .这样,接收方可以分析它并理解它是一个 JSON 字符串。

阅读更多:

  • JSON.parse()
  • JavaScriptSerializer.DeserializeObject Method

最新更新