2012-07-31 22 views
0

我正在使用返回JSON字符串的Web服務。對象數組。 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

你有一個額外的','在你的objs的末尾;可能是複製粘貼錯誤,但我認爲值得指出。 – scrappedcola 2012-07-31 21:38:43

+0

下面是類似問題的答案:http://stackoverflow.com/questions/402996/deserializing-json-objects-as-listtype-not-working-with-asmx-service – Vlad 2012-07-31 22:19:38

回答

1

它看起來像你鑄造一個字符串對象數組...我希望它拋出一個異常,但它不是,那麼試試這個:

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

你是實際上反序列化一組用戶。根本不需要jsonmenuwrapper課程。

只需更改1線:

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的答案,它作品。 – 2012-07-31 22:10:32

+0

非常感謝,幫助我! – 2014-01-27 17:10:03

0

不需要標記Serializable你的班?

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

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