2017-09-18 71 views
0

我有JSON字符串輸出這樣的:取第一個元素的動態JsonConvert.DeserializeObject陣列

串apiResult =

{ 
    "error":[], 
    "result":{ 
     "RARAGA":{ 
     "a":["4","1","1.1"], 
     "b":["4","1","2"], 
     "c":["1","2"], 
     "v":["4","4"], 
     "p":["5","2"], 
     "t":[1], 
     "l":["3","4"], 
     "h":["5","7"], 
     "o":"8" 
     } 
    } 
} 

我試圖做的是將它與Newtonsoft.Json轉換:

dynamic result = JsonConvert.DeserializeObject(apiResult); 

只能採取「RARAGA」屬性爲對象的這個結果,所以我可以拿自己的價值觀的A/b/C等,我只需要把它像值:

result.result.RARAGA.a[0] 

點是這串「RARAGA」始終是隨機

+0

在樣本您提供'RARAGA '不是Array的一個元素,它是一個屬性。檢查示例JSON – ASpirin

+0

對我的壞。無論如何,我無法訪問它 – borewik

回答

1

如果你不知道什麼是財產的名稱(或希望重複所有屬性)你可以使用JObject

JObject result = JsonConvert.DeserializeObject<JObject>(apiResult); 
dynamic res = result["result"].First().First; 

水庫將包含一個動態變量

+0

是的,非常感謝。我差不多在上面(發現使用JObject),但你的兩條線看起來好多了。十分感謝! – borewik

0

如果使用http://json2csharp.com/#然後下面應該是模型,你應該反序列化JSON字符串

public class RARAGA 
{ 
    public List<string> a { get; set; } 
    public List<string> b { get; set; } 
    public List<string> c { get; set; } 
    public List<string> v { get; set; } 
    public List<string> p { get; set; } 
    public List<int> t { get; set; } 
    public List<string> l { get; set; } 
    public List<string> h { get; set; } 
    public string o { get; set; } 
} 

public class Result 
{ 
    public RARAGA RARAGA { get; set; } 
} 

public class RootObject 
{ 
    public List<object> error { get; set; } 
    public Result result { get; set; } 
} 

所以你的反序列化會成爲

RootObject result = JsonConvert.DeserializeObject<RootObject>(apiResult); 

然後你可以像訪問它

result.result.RARAGA.a[0] 
+0

通常我會這樣做,但在這裏「RARAGA」總是一個隨機的不同字符串。 – borewik

0

試試這個

result.result[0]["a"][0] 

使用結果[0]代替result.RARAGA

+0

不幸的是沒有工作'訪問JObject值與無效鍵值:0.對象屬性名稱預計.' – borewik

0

使用類RARAGA從拉胡爾的回答第一個對象的價值和轉換JToken(如阿司匹林的答案):

public class RARAGA 
{ 
    public List<string> a { get; set; } 
    public List<string> b { get; set; } 
    public List<string> c { get; set; } 
    public List<string> v { get; set; } 
    public List<string> p { get; set; } 
    public List<int> t { get; set; } 
    public List<string> l { get; set; } 
    public List<string> h { get; set; } 
    public string o { get; set; } 
} 

JObject loObject = JObject.Parse(apiResult); 
RARAGA loRARAGA = loObject["result"].First.First.ToObject<RARAGA>(); 
Console.WriteLine(loRARAGA.a[0]); 
相關問題