2015-04-03 37 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); 
相关问题