c# Десериализовать JSON-список ошибок объектов

когда я десериализую в список объектов, он работает, но когда я десериализую в объект со списком, он выдает ошибку. Любая идея, как заставить это работать?

имя страницы: testjson.aspx

using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace Web.JSON
{
    public partial class testJson : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string json = "[{\"SequenceNumber\":1,\"FirstName\":\"FN1\",\"LastName\":\"LN1\"},{\"SequenceNumber\":2,\"FirstName\":\"FN2\",\"LastName\":\"LN2\"}]";


            //This work
            IList<Person> persons = new JavaScriptSerializer().Deserialize<IList<Person>>(json);

            //This error
            //People persons = new JavaScriptSerializer().Deserialize<People>(json);


            Response.Write(persons.Count());
        }
    }

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

    class People : List<Person>
    {
        public People()
        {

        }
        public People(IEnumerable<Person> init)
        {
            AddRange(init);            
        }
    }

Сообщение об ошибке: значение "System.Collections.Generic.Dictionary`2[System.String,System.Object]" не имеет типа "JSON.Person" и не может использоваться в этой универсальной коллекции.


person Rich T    schedule 23.02.2011    source источник


Ответы (1)


Я бы предложил сделать что-то вроде этого:

    People persons = new People(new JavaScriptSerializer().Deserialize<IList<Person>>(json));

и изменив свой конструктор на это:

    public People(IEnumerable<Person> collection) : base(collection)
    {

    }

Вам не нужно беспокоиться о беспорядочных приведения типов между типами, и это работает так же хорошо, поскольку ваш класс People имеет базовый конструктор, который принимает IEnumberable.

person Daniel Ahrnsbrak    schedule 23.02.2011
comment
Фантастический! Я потратил много времени, пытаясь понять, как десериализовать свой пользовательский объект, прежде чем нашел ваш пост. Большое спасибо. - person csigrist; 01.05.2012