2016-08-26 38 views
0

這是JSON我收到的響應,我無法解析,請幫助我。如何解析我的Json響應字符串在C#

{ 
"features": [{ 
    "attributes": { 
     "OBJECTID": 1, 
     "schcd": "29030300431", 
     "schnm": "UNAIDED GENITALIA LIPS DALMATIA RS" 

    }, 
    "geometry": { 
     "x": 8449476.63052563, 
     "y": 1845072.4204768054 
    } 
}] 
} 
+0

json看起來很好。你有什麼嘗試?爲什麼它不起作用? – smoksnes

+0

這是json解析的一個很好的例子 - http://stackoverflow.com/questions/6620165/how-can-i-parse-json-with-c – smoksnes

+0

我想獲得OBJECTID的價值我不怎麼樣,我嘗試了一些但我失敗 – user3728743

回答

0

這裏有一個答案可能讓你開始Deserialize JSON with C#

我更喜歡從NewtonSoft解決方案:Newtonsoft JSON Deserialize

您可以使用自己的JsonConverter簡單序列化/反序列化對象

這裏的一個簡單的例子: 您首先需要與您的JSON結構相匹配的類:

public class MyCoolClass 
{ 
    public IEnumerable<Feature> features {get; set;} 
} 

public class Feature 
{ 
    public Attributes Attributes {get; set;} 
    public Geometry Geometry {get; set;} 
} 

public class Attributes 
{ 
    public int ObjectId {get; set;} 
    public string Schcd {get; set;} 
    public string Schnm {get; set;} 
} 

public class Geometry 
{ 
    public double X {get; set;} 
    public double Y {get; set;} 
} 

然後你只需要使用JsonConverter(JSON.Net)是這樣的:

MyCoolClass tmp = JsonConvert.DeserializeObject<MyCoolClass>(jsonStringThatYouGot); 
0

要分析你很可能會需要像JSON.Net或類似東西的extern庫中的JSON。

然後,您需要創建一個類(包裝器),其屬性與您的JSON字符串匹配並將字符串反序列化爲該對象。

當您創建要將反序列化JSON字符串的包裝類時,請小心使用與它們在JSON字符串中命名相同的方式來命名屬性。

例子:

public class MyObject { 
    public List <Feature> Features {get;set;} 
} 

public class Feature { 
    public MyAttributes Attributes {get;set; } 
    public Geometries Geometries {get;set; } 
} 

public class MyAttributes { 
    public int ObjectID {get;set;} 
    public string Schcd {get;set;} 
    public string Schnm {get;set;} 
} 

public class Geometries { 
    public double X {get;set;} 
    public double Y {get;set;} 
} 

然後,只需調用JSON庫的deserialisation功能:

var myObject = JsonConvert.DeserializeObject<MyObject>(jsonString); 

要訪問類的對象ID屬性,那麼您只要致電:

myObject.Features[0].Attributes.ObjectId; 
+0

感謝Bojan,我已經upvoted你的答案再次感謝你,但我尋找獲得GEOMETY類X,Y值與MyObject的objetct引用? – user3728743

+0

var v = myObject.features [0] .Attributes。schcd; 向我顯示錯誤,如無法將[]的索引應用於system.Collection.Generic.IEnumerable <>類型的表達式。 – user3728743

+0

嘗試'myObject.Features.ToList()[0] .Attributes.schcd'因爲反序列化將要素列表轉換爲IEnumerable,您需要調用ToList()函數以使用[]運算符訪問...您是否設置了包裝類中的Features屬性爲List或IEnumerable? –

0

如果你可以使用dynamic你可以這樣做

var json = "{ \"features\" : [ { \"attributes\": { \"OBJECTID\": 1, \"schcd\": \"29030300431\", \"schnm\": \"UNAIDED GENITALIA LIPS DALMATIA RS\" }, \"geometry\": { \"x\": 8449476.63052563, \"y\": 1845072.4204768054 } } ] }"; 

dynamic obj = JsonConvert.DeserializeObject(json); 
var objectId = obj.features[0].attributes.OBJECTID; 

它使用Newtonsoft.Json,它可以與here的Nuget一起安裝。

Install-Package Newtonsoft.Json 

請注意,這並不做任何空的檢查,並簡單地假設它在features的第一個對象,你想要的。但它很簡單,不需要您創建任何模型。

如果你想使用更完整的模型,我會去Bojan Bj0ey_wh提供的答案。

+0

感謝您抽菸,這是錯誤我得到'Newtonsoft.Json.Linq.JObject'不包含'features'的定義 – user3728743

+0

答案中的示例工作並返回objectid 1.您確定您使用的是與您發佈的相同的json嗎? – smoksnes

+0

另外。確保將其設置爲「動態」。 – smoksnes