2014-12-02 3 views
0

이 간단한 JSON 문자열을 C#의 목록에 역 직렬화하려면 어떻게해야합니까? 내가 DataContractJsonSerializer가 System.Runtime.Serialization.Json에서 발견 사용하고, 외부 라이브러리를 필요로하지 않는 등JSON 배열에서 C# 목록

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

것을

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

.

편집 : System.Web.Script.Serialization에있는 JavaScriptSerializer도 사용할 수 있습니다.

+0

체크 아웃 http://stackoverflow.com/questions/13506542/deserializing-json-using-system-runtime-serialization-json – tophallen

+0

나는 그것을 이미 보았습니다. JSON 데이터 구조는 정말로 다릅니다. – nikk

답변

2

그냥 이렇게

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

왜 "\"있니? 위의 게시물과 다른 – nikk

+1

그게 어떻게 json을 포맷, 그렇지 않으면 컴파일러 월가 오류를 보여줍니다! – Sajeetharan

+0

그것을 얻었습니다! json이 코드 내에 명확하게 제공된다면. 그 교훈은 배웠다. – nikk

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; 

및 근무 데모

on4ThnU7 
n71YZYVKD 
CVfSpM2W 
10kQotV 

출력

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

아래로 JSON 직렬화 : https://dotnetfiddle.net/4OLS2v

+0

감사합니다 ekad! 위의 내 대답과 비슷합니다. 고맙습니다. 다음 번에 다시 거기에있을 수 있기를 바랍니다! :) – nikk

+0

JsonConvert는 어디에 있습니까? 그 네임 스페이스 아래서 그것을 보지 못했습니다. – nikk

+0

그게 내가 말한 것입니다 : 나는 그 외부 lib 중 하나를 사용하고 싶지 않았습니다. 응용 프로그램이 배포 될 때 종속성을 처리하고 싶지 않습니다. "System.something"네임 스페이스 여야합니다. – nikk

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

0

JavaScriptSerializer 시리얼 = 새로운 JavaScriptSerializer(); List stringList = serializer.Deserialize> (inpustJson);