尝试在C#中反序列化JSON时出现InvalidCastException

时间:2010-09-28 15:27:43

标签: c# json exception serialization

我正在尝试反序列化Json流。 我在Windows Phone 7的Visual Studion下工作。 这是我正在使用的代码:

    public Accueil()
    {
        InitializeComponent();
        string baseUri = "http://path/to/my/webservice";
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(baseUri));
        request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
    }

    private void ReadCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
        using (StreamReader streamReader1 = new StreamReader(response.GetResponseStream()))
        {
            string returnedString= streamReader1.ReadToEnd();
            using (MemoryStream mStream = new MemoryStream(Encoding.Unicode.GetBytes(returnedString)))
            {
                List<Person> persons = new List<Person>();
                persons= returnResult(mStream);
            }


        }
    }

    private List<Person> returnResult(MemoryStream mStream)
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<Person>));
        return (List<Person>)serializer.ReadObject(mStream);
    }

正如您所看到的,我打电话给我的网络服务给了我一个回应。然后,调用异步方法来处理webrequest并获取返回的数据。最后,antoher方法对该数据进行serilize并返回一个Person of List。

当然,有一个“人”类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

问题是“returnResult”方法中返回了无效的强制转换错误:

InvalidCastException

在那一行:

return (List<Person>)serializer.ReadObject(mStream);

您对退回的错误有所了解吗?我该怎么办?

这是一个Json样本:

{
  "Persons" : 
    [
      {"FirstName":"Foo","LastName":"Bar"},
      {"FirstName":"Hello","LastName":"World"}
    ]
}

谢谢,

此致

1 个答案:

答案 0 :(得分:1)

(老问题,但为什么不回答:))

您的Json与人员名单不符,但只有1个包含财产人的对象(这是一份人员名单)

像:

public class AllPeople {
   public List<Person> Persons { get;set; }
}