0

我正在使用一个返回 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' 不支持数组的反序列化。

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

4

3 回答 3

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);
    }
}
于 2012-07-31T22:02:03.500 回答
1

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

String str ="[{\"users\":{\"company\":\"abc\",\"contact_Number\":\"999999999\"}},
             {\"users\":{\"company\":\"xyz\",\"contact_Number\":\"888888888\"}},
             {\"users\":{\"company\":\"xxx\",\"contact_Number\":\"555555555\"}}
]";
于 2012-07-31T21:37:12.083 回答
0

你的课程不需要标记Serializable吗?

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

[Serializable]
public class user
{
//...
}
于 2013-02-10T21:32:40.990 回答