2014-12-02 57 views
0

如何反序列化這個簡單的JSON字符串到C#中的列表?JSON數組到C#列表

["on4ThnU7","n71YZYVKD","CVfSpM2W","10kQotV"] 

使得

List<string> myStrings = [the content of the JSON above] 

我使用DataContractJsonSerializer在System.Runtime.Serialization.Json發現,並且不需要外部庫。

編輯: 也可以在System.Web.Script.Serialization中找到JavaScriptSerializer。

+0

檢查出http://stackoverflow.com/questions/13506542/deserializing-json-using-system-runtime-serialization-json – tophallen 2014-12-02 04:57:52

+0

我已經看到了。 JSON數據結構真的不同。 – nikk 2014-12-02 05:02:44

回答

2

只是這樣做,

string json = "[\"on4ThnU7\",\"n71YZYVKD\",\"CVfSpM2W\",\"10kQotV\"]"; 
    var result = new JavaScriptSerializer().Deserialize<List<String>>(json); 
+0

爲什麼它有「\」?不像上面的帖子 – nikk 2014-12-02 05:43:10

+1

那就是你如何格式化json,否則編譯器會顯示錯誤! – Sajeetharan 2014-12-02 05:44:57

+0

明白了!因爲json是在代碼中明確提供的。這方面的經驗教訓。 – nikk 2014-12-02 05:49:24

1

您可以將字符串數據轉換爲bytes[],在MemoryStream紙包起來,然後用DataContractJsonSerializer反序列化:

string stringData = "[\"on4ThnU7\", \"n71YZYVKD\", \"CVfSpM2W\", \"10kQotV\"]"; 
string[] arrayData; 
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(stringData))) 
{ 
    var deserializer = new DataContractJsonSerializer(typeof(string[])); 
    arrayData = deserializer.ReadObject(ms) as string[]; 
} 
if (arrayData == null) 
    Console.WriteLine("Wrong data"); 
else 
{ 
    foreach (var item in arrayData) 
     Console.WriteLine(item); 
} 
1

您可以使用Json.Net,請確保您輸入Newtonsoft.Json命名空間

using Newtonsoft.Json; 

和反序列化JSON的如下

string json = @"[""on4ThnU7"",""n71YZYVKD"",""CVfSpM2W"",""10kQotV""]"; 
List<string> myStrings = JsonConvert.DeserializeObject<List<string>>(json); 
foreach (string str in myStrings) 
{ 
    Console.WriteLine(str); 
} 

輸出

on4ThnU7 
n71YZYVKD 
CVfSpM2W 
10kQotV 

工作演示:https://dotnetfiddle.net/4OLS2v

+0

謝謝ekad!很像我上面的答案。我很感激。希望你下次再來! :) – nikk 2014-12-02 05:24:53

+0

雖然JsonConvert在哪裏?沒有在該名稱空間下看到它。 – nikk 2014-12-02 05:26:41

+0

所以這就是我所說的:我不想使用任何這些外部庫。在部署應用程序時不想處理依賴關係。 它必須是'System.something'命名空間。 – nikk 2014-12-02 05:36:58

0

好吧,我知道了。

using System.Web.Script.Serialization;

public List<string> MyJsonDeserializer(string filename) 
{ 
    //get json data 
    Stream fs = new FileStream(filename, FileMode.Open); 
    string jsonData = new StreamReader(fs).ReadToEnd(); 
    fs.Close(); 

    //deserialize json data to c# list 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    return (List<string>)serializer.Deserialize(jsonData, typeof(List<string>));   
}  
+2

我上面發佈的答案有什麼不同? – Sajeetharan 2014-12-02 05:25:41

0

JavaScriptSerializer串行=新JavaScriptSerializer(); List stringList = serializer.Deserialize>(inpustJson);