2014-02-28 37 views
2

如何解析json字段是否包含冒号(:)?像这样:用JSON中的冒号解析字段名称

{ 
    "dc:creator":"Jordan, Micheal", 
    "element:publicationName":"Applied Ergonomics", 
    "element:issn":"2839749823" 
} 

事实上,我不知道如何使用像restsharp这样的库来进行映射?

回答

13

使用Json.Net

string json = @"{ 
      ""dc:creator"":""Jordan, Micheal"", 
      ""element:publicationName"":""Applied Ergonomics"", 
      ""element:issn"":""2839749823"" 
     }"; 

var pub = JsonConvert.DeserializeObject<Publication>(json); 

public class Publication 
{ 
    [JsonProperty("dc:creator")] 
    public string creator { set; get; } 
    [JsonProperty("element:publicationName")] 
    public string publicationName { set; get; } 
    [JsonProperty("element:issn")] 
    public string issn { set; get; } 
} 

OR

Console.WriteLine(JObject.Parse(json)["dc:creator"]); 
+1

+1真的很好的答案,只是一个注意:你违反命名约定的.NET(即属性应PascalCased) – Leri

+0

是否有任何注释映射类名?就像我们为领域做的一样。 –

+0

@SerhatKoroglu你不需要任何类名称的属性.. –

3

如果使用DataContractJsonSerializerDataMemberAttribute具有可用于覆盖默认名称属性Name。这意味着当你反序列化json的属性值时,dc:creator被赋值为Publication::Creator属性,而当你序列化C#对象时则相反。

例如:

public class Publication 
{ 
    [DataMember(Name="dc:creator")] 
    public string Creator { set; get; } 
    [DataMember(Name="element:publicationName")] 
    public string PublicationName { set; get; } 
    [DataMember(Name="element:issn")] 
    public string Issn { set; get; } 
} 

如果您选择使用Json.Net,@ L.B的答案是要走的路。