2013-07-18 136 views
0

我有一個類:反序列化JSON與不同類型的串行/解串

[DataContract] 
public class A 
{ 
    [DataMember] 
    public B ArbitraryProperty { get; set;} 
} 

當連載, 「ArbitraryProperty」 需要在 「B」 類的形式:

[DataContract] 
public class B 
{ 
    [DataMember] 
    public string ValueA { get; set; } 
    [DataMember] 
    public string ValueB { get; set; } 
} 

這裏的JSON輸出:

{ 
    "ArbitraryProperty": { "ValueA": "I'm a value.", "ValueB": "I'm a value too!" } 
} 

當我從服務器返回同一個對象時,該屬性以SIM卡的形式返回PLE字符串是這樣的:

{ 
    "ArbitraryProperty": "I'm not a B, muahahaha!!!" 
} 

必須有一招,讓DataContractJsonSerializer知道它應該值反序列化到一個字符串,而不是一個「B」。

有沒有特別的方法來設置類「A」? :/

有什麼建議嗎?

+0

聽起來對我來說就像你有兩個類,一個具有'B'屬性,另一個具有'string'屬性。你的輸出和你說的回來是兩個完全無關的數據結構。 –

+0

@JoeEnos因此,問題:)我真的不想爲我的請求和響應類型做不同的類... – Tim

回答

0

我不認爲這是正確的路要走 - 我認爲可讀性和可用性的正確答案是正確輸入請求和響應類。但是......我唯一能想到的就是讓該房產成爲object,而不是強烈地打字。您只需確保在爲其分配值時分配正確的類型。

public class A 
{ 
    public object ArbitraryProperty { get; set; } 
} 

它仍然會序列正確:

var a = new A { ArbitraryProperty = new B { ValueA = "a", ValueB = "b" } }; 
var json = JsonConvert.SerializeObject(a); 
Console.WriteLine(json); 

當對象回來,反序列化就會將這個字符串到屬性。

json = "{'ArbitraryProperty':'This is some string'}"; 
a = JsonConvert.DeserializeObject<A>(json); 

該代碼可以使用從JSON.NET簡單的序列化/反序列化,但如果的WebAPI或任何技術你使用會喜歡它,我不知道。

+0

我想它會看起來像這樣。我想我會接受你的建議,做正確的事情,並創建不同的類型。謝謝! – Tim

相關問題