2014-02-07 74 views
2

我有一個將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中反序列化。

是否有這樣做的「正常」方式?

+0

不能說Obj-C或Java,但對於.NET - 如果你使用Json.Net,你可以在JSON中包含一個'$ type'屬性(必須是第一個屬性)Json.Net用作關於目標類型應該是什麼的反序列化器的提示。 –

+0

謝謝 - 我希望有可能是一個跨平臺的解決方案,或做它的標準方式,因爲我使用JSON經驗是一點點有限的。 –

+0

我也發現這個。 Objective-C的:http://stackoverflow.com/questions/14958883/ios-serialize-deserialize-complex-json-generically-from-nsobject-class。我不明白:)但它似乎處理映射JSON以基於JSON本身屬性specifc類型。希望有所幫助。 –

回答

1

如何在JSON中將一個集合拆分爲單獨的數組(強類型)?

像這樣:

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

這樣,如果任何不存在,解串器也只是把它們留作空白。

+0

這似乎效率不高,因爲你需要爲每個子類創建一個數組,然後在每次添加新子類時修改包含對象以添加新數組。它也不能很好地處理創建子類的子類的用法。但也許這是唯一有意義的方法。評論鼓勵。 –

相關問題