2015-04-03 74 views
4

如何將Json屬性反序列化爲動態對象,如果它以@符號開頭的話。將@符號開頭的JSON屬性反序列化爲C#動態對象?

{ 
    "@size": "13", 
    "text": "some text", 
    "Id": 483606 
} 

我可以得到像這樣的id和文本屬性。

dynamic json = JObject.Parse(txt); 
string x = json.text; 
+0

你應該表現出到目前爲止你已經嘗試過的東西。 – Les 2015-04-03 12:59:02

+0

你想如何映射它? – 2015-04-03 12:59:19

回答

8

因爲你不能在C#標記名稱中使用@,您將需要映射@size別的東西,像 「SizeString」 (因爲它是你的JSON中的一個字符串)。我使用WCF數據契約屬性,但你可以使用等效的JSON屬性

... 
[DataMember(Name = "@size")] 
public string SizeString { get; set; } 
... 

下面是如何反序列化JSON字符串的例子。也許你可以適應你的情況,或者澄清你的問題。

... 
string j = @"{ 
      ""@size"": ""13"", 
      ""text"": ""some text"", 
      ""Id"": 483606 
     }"; 
     MyClass mc = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(j); 
... 

[DataContract] 
public class MyClass 
{ 
    [DataMember(Name="@size")] 
    public string SizeString { get; set; } 
    [DataMember()] 
    public string text { get; set; } 
    [DataMember()] 
    public int Id { get; set; } 
} 

如果你不打算加載JSON轉換成一個預定義類,你可以做以下...

var o = JObject.Parse(j); 
var x = o["text"]; 
var size = o["@size"]; 
7

假設你使用Json.NET:

public class MyObject 
{ 
    [JsonProperty("@size")] 
    public string size { get; set; } 

    public string text { get; set; } 

    public int Id { get; set; } 
} 

var result = JsonConvert.DeserializeObject<MyObject>(json); 
相關問題