c# - 如何在 JSON 中指定子类类型(在 REST Web 服务中)

标签 c# .net json web-services serialization

我有一个 .NET REST 网络服务,可以将 JSON 数据发送到各种移动应用程序。

我正在测试一种新方法,它返回的对象可能是几个子类之一,例如在下面的伪代码中它可能返回:

wallet: {
  cards: [ { name: 'mastercard', ...},
           { name: 'visacard', ...},
           { name: 'photocard', ...}
  ]
}

其中每张卡片都是卡片的子类,例如

public abstract class Card
{
  ...
}
public class CreditCard : Card 
{
  ...
}
public class ConcessionCard : Card
{
  ...
}

public string webServiceMethodGetWallet()
{
  myWallet = new Wallet();
  CreditCard visaCard = new CreditCard();
  CreditCard masterCard = new CreditCard();
  ConcessionCard photoCard = new ConcessionCard();
  myWallet.cards.AddAll(visaCard, masterCard, photoCard);
  return JSON.Serialize(myWallet);  
}

我正在多个平台(iOS、Android 和 Windows Phone)上反序列化这些数据。

什么是让客户端应用程序在反序列化时知道每个对象使用哪个类的好策略?例如在上面的示例中,客户端应用程序如何在不检查所有字段的情况下判断是创建类型为 CreditCard 还是 ConcessionCard 的类?

请记住,我需要在 Objective C、Java 和 .NET 中进行反序列化。

是否有“正常”的方式来做到这一点?

最佳答案

如何在 JSON 中将一个集合拆分为单独的数组(强类型)?

像这样:

wallet: {
  CreditCards: [ { name: 'mastercard', ...},
           { name: 'visacard', ...}
  ],
  ConcessionCards: [ { name: 'photocard', ...}
  ]
}

这样,如果不存在,反序列化器会将它们保留为空。

关于c# - 如何在 JSON 中指定子类类型(在 REST Web 服务中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21632494/

相关文章:

.net - .NET 的 3way 合并库

c# - 如何使用 MVVM 在 WPF 的主窗口中显示用户控件

c# - 使用特定接口(interface)时的 MEF 组合导入问题

PHP MySQL 数组,如何获取 API 的特定结构?

c# - 做继承权

c# - 检索数据 LINQ 与反射

c# - 将额外的 ViewData 传递给 DisplayFor 模板

json - 将 JSON 解析为哈希表

javascript - 使用 array.push 没有给出正确结构的数组(不能使用带有过滤功能的数组)

c# - Docker:将文件写入物理或共享路径,使用docker和netcore3.1