无法在ASP.NET中使用反序列化的JSON填充列表

时间:2016-09-23 11:24:18

标签: c# asp.net json asp.net-mvc deserialization

我正在使用ASP.NET MVC 4编写应用程序,我尝试在我的类型的对象中填充列表。我编写控制台应用程序只是为了尝试这个代码:

 using (var webClient = new WebClient())
        {
            var json = webClient.DownloadString(URL);
            var myTypeVariable= new JavaScriptSerializer().Deserialize<MyTypeSummary>(json);
            return myTypeVariable;
        }

myTypeVariable是一个类型为

的对象
public class MyTypeSummary
{
    public int Id { get; set; }
    public List<MyType> MyTypeItems{ get; set; }
    public DateTime PublicationDate { get; set; }
}

不幸的是,当我在ASP.NET Index()操作中使用此代码时,它只获得了正确填充的DateTime属性。 MyTypeItems Listremained为null,与在我的控制台应用程序中执行此操作的效果相反(List已正确填充)。

我的班级看起来像这样:

public class MyType
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
    public int Unit { get; set; }
    public double Price1{ get; set; }
    public double Price2{ get; set; }
    public double Price3{ get; set; }
}

而且我无法弄清楚为什么在控制台应用程序中这种方法运行良好并且在asp中根本不起作用。有人可以帮忙吗? 编辑:这是我得到的json字符串:

"{\"publicationDate\":\"2016-09-23T11:36:26.4723947Z\",\"items\":[{\"name\":\"US Dollar\",\"code\":\"USD\",\"unit\":1,\"purchasePrice\":3.6682,\"sellPrice\":3.6779,\"averagePrice\":3.6730},{\"name\":\"Euro\",\"code\":\"EUR\",\"unit\":1,\"purchasePrice\":3.8842,\"sellPrice\":3.9027,\"averagePrice\":3.8935},{\"name\":\"Swiss Franc\",\"code\":\"CHF\",\"unit\":1,\"purchasePrice\":3.7940,\"sellPrice\":3.8041,\"averagePrice\":3.7990},{\"name\":\"Russian ruble\",\"code\":\"RUB\",\"unit\":100,\"purchasePrice\":6.8865,\"sellPrice\":6.9096,\"averagePrice\":6.8981},{\"name\":\"Czech koruna\",\"code\":\"CZK\",\"unit\":100,\"purchasePrice\":13.9250,\"sellPrice\":13.9584,\"averagePrice\":13.9417},{\"name\":\"Pound sterling\",\"code\":\"GBP\",\"unit\":1,\"purchasePrice\":5.6786,\"sellPrice\":5.6989,\"averagePrice\":5.6887}]}"

2 个答案:

答案 0 :(得分:2)

根据您提供的JSON,您的课程应该是这样的。您可以尝试将您的JSON转换为Json2Csharp处的对象。

 public class Item
    {
        public string name { get; set; }
        public string code { get; set; }
        public int unit { get; set; }
        public double purchasePrice { get; set; }
        public double sellPrice { get; set; }
        public double averagePrice { get; set; }
    }

    public class MyTypeSummary
    {
        public string publicationDate { get; set; }
        public List<Item> items { get; set; }
    }

答案 1 :(得分:1)

.Deserialize<MyTypeSummary>正如@ stephen-muecke所说。

我个人使用NuGet包管理器安装`NewtonSoft.Json'然后使用:

JsonConvert.DeserializeObject<MyTypeSummary>(json); found here

Here is why