InvalidCastException при попытке десериализации JSON в C # - PullRequest
3 голосов
/ 28 сентября 2010

Я пытаюсь десериализовать поток Json.Я работаю в Visual Studion для Windows Phone 7. Вот код, который я использую:

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

Как видите, я звоню в мой веб-сервис, который дает мне ответ.Затем вызывается асинхронный метод для обработки веб-запроса и получения возвращенных данных.Наконец, метод antoher выполняет сериализацию этих данных и возвращает список Person.

Конечно, существует класс "Person":

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 Ответ

1 голос
/ 20 июля 2011

(старый вопрос, но почему бы не ответить на него:))

Ваш Json не соответствует списку лиц, а является только 1 объектом, содержащим собственность лиц (который является списком лиц)

Как:

public class AllPeople {
   public List<Person> Persons { get;set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...