对象数组。 JSON反序列化。请建议

时间:2012-07-31 21:32:26

标签: c# asp.net arrays json list

我正在使用一个返回JSON字符串的Web服务。

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'不支持反序列化数组。

有人可以指导我吗?感谢..

3 个答案:

答案 0 :(得分:2)

您实际上正在反序列化一组用户。根本不需要jsonmenuwrapper课程。

只需更改1行:

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

更好的答案

实际上,您尝试反序列化的数据结构是包装器对象的数组,但每个包装器只包含1&#34;用户&#34;不是他们的数组。这是一个带有单元测试的工作设置,以显示其工作原理:

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);
    }
}

答案 1 :(得分:1)

看起来你正在将一个字符串转换为一个对象数组......我希望它会抛出异常,但事实并非如此,所以试试这个:

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

答案 2 :(得分:0)

不要将您的课程标记为Serializable吗?

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

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