在ASP.NET中不能用反序列化JSON填充列表

本文关键字:反序列化 JSON 填充 列表 不能 ASP NET | 更新日期: 2023-09-27 18:08:40

我正在用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列表仍然为空,这与在控制台应用程序中执行此操作的效果正好相反(列表已正确填充)。

我的类是这样的:

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}]}"

在ASP.NET中不能用反序列化JSON填充列表

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

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

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

我个人使用NuGet包管理器安装NewtonSoft。Json’,然后使用:

JsonConvert.DeserializeObject<MyTypeSummary>(json);在这里找到