我有一个 .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/