我可以使用 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