2013-02-26 3 views
0

저는 C#이 정말 좋지 않아 다음과 같이 도움을 드리고 싶습니다. 현재 Json Array를 WCF 웹 서비스에 전달하고 있습니다. json 배열을 가져 와서 목록에 삽입해야합니다. C#에서 deserialize 할 생각이 전혀 없습니다. 이를 달성하는 가장 좋은 방법은 무엇인지 나에게 제안 해주십시오. Wcf의 Json Stream 배열로 배열하는 C# 서비스

public String UpdateOrderAddress(Stream userInfo) 
    { 
     try 
     {    
      StreamReader reader = new StreamReader(userInfo); 
      string JSONdata = reader.ReadToEnd(); 
      if (JSONdata == null) 
      {      
       return "null"; 
      }       

      return JSONdata;  // Success ! 
     } 
     catch (Exception e) 
     { 
      return e.ToString(); 
     } 
    } 

내가 당신이 값을 포함하고를 사용하도록 필수 특성을 대표하는 클래스를 만들 수 있습니다

[{"date":"2013-02-22 15:30:374:021","id":"1","description":"test","name":"test"}, 
"date":"2013-02-25 11:56:926:020","id":"2","description":"ghy","name":"fhh"}, 
"date":"2013-02-25 11:56:248:026","id":"3","description":"ghfm","name":"run"}] 
+0

JSON.net을 사용해 보셨습니까? 여기 –

+0

샘플입니다. http://stackoverflow.com/questions/7895105/json-deserialize-c-sharp – Zaki

답변

2

당신은 내가 정말하지 마십시오 JSON 문자열을 역 직렬화하려고하는 방법이 표시되지 않습니다 게시 코드 여기에 어떤 관련성이 있는지 확인해보십시오. 그러나 어떤 경우에도 JSON을 구체적인 C# 클래스로 비 직렬화하는 방법입니다.

  1. 당신의 자바 스크립트의 구조와 일치하는 클래스를 만들기는 너무 객체 :

    public class Data 
    { 
        public string Date {get;set;} 
        public int ID {get;set;} 
        public string Description {get;set;} 
        public string Name {get;set;} 
    } 
    
  2. 뿐만 그래서 JavascriptSerializer를 사용하여 직렬화 :

    var deserializedData = new JavaScriptSerializer().Deserialize<List<Data>>(jsonString); 
    

주를 당신의 원래 JSON 문자열 형식이 잘못되었습니다. 배열의 각 요소에 개구부 {이 누락되었습니다. 정말 같아야

[{ "기간": "2013년 2월 22일 15 : 30 : 374 : 021", "ID": "1", "설명": "테스트", " "name": "test"}, { "date": "2013-02-25 11 : 56 : 926 : 020", "id": "2", "description": "ghy", "name" "fhh"}, { "date": "2013-02-25 11 : 56 : 248 : 026", "id": "3", "description": "ghfm", "name": "run" }]

지금, 당신은, 위의 직렬화도록하려고하면 :

string json = @"[{""date"":""2013-02-22 15:30:374:021"",""id"":""1"",""description"":""test"",""name"":""test""}, 
    {""date"":""2013-02-25 11:56:926:020"",""id"":""2"",""description"":""ghy"",""name"":""fhh""}, 
    {""date"":""2013-02-25 11:56:248:026"",""id"":""3"",""description"":""ghfm"",""name"":""run""}]"; 

var deserializedData = new JavaScriptSerializer().Deserialize<List<Data>>(json); 

멋진 List<Data>을 얻을 수 있습니다.

또한 나는 이유는 샘플 날짜가 유효하지 않은 날짜 시간 또는 적어도 DateTime 객체가 해당 문자열 표현에서 생성 할 수없는 것을있는 당신의 자바 스크립트 객체에 해당 date 필드의 날짜 시간 필드를 사용하지 않은 있습니다. 예를 들어 "15 : 30 : 374 : 021"은 의미가 없습니다. 374가 초 필드라고 상상해보십시오 ...

System.Web에 대한 참조를 추가해야합니다.JavascriptSerializer를 사용할 수있는 확장 기능.

+0

감사합니다. 나는 그것을 작동 시켰어. – razeth01

0

독자에게서 얻는 문자열 데이터입니다 다음과 같이 내 코드 보인다 JavascriptSerializer 클래스입니다. 유형을 지정하는 Deserialize<T> 메서드를 호출하여 코드에 JSON을 deserialize합니다.

참조 용으로 클래스 이름에 링크.

0

Newtonsoft.Json 라이브러리를 사용할 수 있습니다. 당신이해야 할 모든은 다음과 같습니다

List<YourClass> yourClassList = JsonConvert.DeserializeObject<List<YourClass>>(JSONdata); 

당신은 더 많은 정보를 찾을 심지어 샘플 here

관련 문제