我有一個將REST數據發送到各種移動應用程序的.NET REST Web服務。如何在JSON中指定子類型(在REST Web服務中)
,我在下面的僞代碼測試返回的對象,可能是幾個子類的一個新的方法,例如,它可以返回:
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中反序列化。
是否有這樣做的「正常」方式?
不能說Obj-C或Java,但對於.NET - 如果你使用Json.Net,你可以在JSON中包含一個'$ type'屬性(必須是第一個屬性)Json.Net用作關於目標類型應該是什麼的反序列化器的提示。 –
謝謝 - 我希望有可能是一個跨平臺的解決方案,或做它的標準方式,因爲我使用JSON經驗是一點點有限的。 –
我也發現這個。 Objective-C的:http://stackoverflow.com/questions/14958883/ios-serialize-deserialize-complex-json-generically-from-nsobject-class。我不明白:)但它似乎處理映射JSON以基於JSON本身屬性specifc類型。希望有所幫助。 –