2014-02-28 46 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的答案是要走的路。