2012-07-31 6 views
0

JSON 문자열을 반환하는 웹 서비스를 사용하고 있습니다.개체 배열입니다. JSON 비 직렬화 제발 제안하십시오

String str =[{"users":{"company":"abc","contact_Number":"999999999"}}, 
      {"users":{"company":"xyz","contact_Number":"888888888"}}, 
      {"users":{"company":"xxx","contact_Number":"555555555"}}, 
] 

역 직렬화 할 수 없습니다. 오류 던지고

class jsonmenuwrapper 
     { 
      public user[] users{ get; set; } 
      // public List<user> listcontacts; 
     } 



public class user 
     { 
      public String company 
      { 
       get; 
       set; 
      } 
      public String contact_Number 
      { 
       get; 
       set; 
      } 
} 

JavaScriptSerializer sr= new JavaScriptSerializer();   

jsonmenuwrapper sr1 = sr.Deserialize<jsonmenuwrapper>(str); 

은 .. jsonmenuwrapper '는 어레이의 직렬화에 대해 지원되지 않는다.

나를 인도 해 주실 수 있습니까? 감사합니다 ..

+0

귀하의 obj의 끝 부분에 여분의','가 있습니다. 아마 복사 - 붙여 넣기 오류가 있지만 지적 가치가 있다고 생각. – scrappedcola

+0

다음은 비슷한 질문에 대한 답변입니다. http://stackoverflow.com/questions/402996/deserializing-json-objects-as-listtype-not-working-with-asmx-service – Vlad

답변

1

당신이 객체의 배열에 문자열을 주조하는 것처럼 그것은 내가 예외가 발생하기를 기대하지만,하지, 그래서이 시도 ... 보이는 : 당신은

String str ="[{\"users\":{\"company\":\"abc\",\"contact_Number\":\"999999999\"}}, 
      {\"users\":{\"company\":\"xyz\",\"contact_Number\":\"888888888\"}}, 
      {\"users\":{\"company\":\"xxx\",\"contact_Number\":\"555555555\"}} 
]"; 
2

있습니다 실제로 사용자 배열을 deserialize합니다. jsonmenuwrapper 클래스가 필요하지 않습니다.

List<user> sr1 = sr.Deserialize<List<user>>(str); 

더 나은 대답 사실, 당신이 역 직렬화하려고하는 데이터 구조 래퍼 객체의 배열이지만,

각 래퍼는 포함

그냥 한 줄을 변경 1 "사용자"는 그것들의 배열이 아닙니다.

public class jsonmenuwrapper 
{ 
    public user users { get; set; } 
} 

public class user 
{ 
    public String company { get; set; } 
    public String contact_Number { get; set; } 
} 

[TestFixture] 
public class JsonTests 
{ 
    [Test] 
    public void TestArrayDeserialization() 
    { 
     const string str = 
@"[{""users"":{""company"":""abc"",""contact_Number"":""999999999""}}, 
{""users"":{""company"":""xyz"",""contact_Number"":""888888888""}}, 
{""users"":{""company"":""xxx"",""contact_Number"":""555555555""}}]"; 

     var serializer = new JavaScriptSerializer(); 
     var data = serializer.Deserialize<List<jsonmenuwrapper>>(str); 

     Assert.AreEqual(3, data.Count); 

     Assert.AreEqual("abc", data[0].users.company); 
     Assert.AreEqual("999999999", data[0].users.contact_Number); 

     Assert.AreEqual("xyz", data[1].users.company); 
     Assert.AreEqual("888888888", data[1].users.contact_Number); 

     Assert.AreEqual("xxx", data[2].users.company); 
     Assert.AreEqual("555555555", data[2].users.contact_Number); 
    } 
} 
+0

John & Rally의 답변을 결합하면 공장. –

+0

많은 도움을 주셔서 감사합니다. –

0

수업이 Serializable를 표시 할 필요가 없습니다 : 여기에 단위 테스트와 작업 설정은 작업이 있음을 보여주는 것입니다?

[Serializable] 
public class jsonmenuwrapper 
{ 
//... 
} 

[Serializable] 
public class user 
{ 
//... 
} 
관련 문제