【发布时间】:2018-04-17 15:37:56
【问题描述】:
我正在尝试将来自 Web 服务的 JSON 响应放入可以传递给我的视图并显示结果的对象中。我似乎在反序列化 JSON 时遇到了一些问题。这是错误。
无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“Project.Models.Order”,因为该类型需要 JSON 对象(例如 {"name":"value"})才能正确反序列化. 要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化。 JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组中反序列化。 路径'',第 1 行,位置 1。
我的控制器代码如下。
string url = @"URL of webservice here";
var returnValue = new WebClient().DownloadString(url);
var obj = JsonConvert.DeserializeObject<Order>(returnValue);
return View(obj);
这是我的看法。
@model Project.Models.Order
@foreach (var order in Model.sWorkOrderNumber)
{
@Model.sWorkOrderNumber
}
这是返回的 JSON。
[{"ShipmentTrackingNUmbers":[{"sTrackingNumber":"Redacted"}],"dtDateShipped":"5/12/2017 12:00:00 AM","dSPRatedWeight":"41.0000","nMBTotalBoxes":"1","sShipToAddressLine2":"Redacted","sShipToCountry":"U.S.A.","sShipToZip":"Redacted","sShipToState":"Redacted","sShipToCity":"Redacted","sShipToAddressLine1":"Redacted","sShipToName":"Redacted","sServiceLevel":"GND","sInvoiceNumber":"","dtInvoiceDate":"","mInvoiceAmount":"","dtDateReceived":"5/8/2017 3:16:25 PM","sStudioCategory2":"","sStudioCategory1":"","sOrderSource":"Redacted","sCustomerComments":"Redacted","sCustomerOrderName":"Redacted","sWorkOrderNumber":"Redacted","sCustomerNumber":"Redacted"},{"ShipmentTrackingNUmbers":[{"sTrackingNumber":"Redacted"}],"dtDateShipped":"5/10/2016 12:00:00 AM","dSPRatedWeight":"3.0000","nMBTotalBoxes":"1","sShipToAddressLine2":"","sShipToCountry":"U.S.A.","sShipToZip":"Redacted","sShipToState":"Redacted","sShipToCity":"Redacted","sShipToAddressLine1":"Redacted","sShipToName":"Redacted","sServiceLevel":"GND","sInvoiceNumber":"","dtInvoiceDate":"","mInvoiceAmount":"","dtDateReceived":"5/2/2016 7:18:41 AM","sStudioCategory2":"","sStudioCategory1":"","sOrderSource":"Redacted","sCustomerComments":"Redacted","sCustomerOrderName":"Redacted","sWorkOrderNumber":"Redacted","sCustomerNumber":"Redacted"}]
编辑:添加订单型号代码
namespace Project.Models
{
public class Order
{
public string ShipmentTrackingNUmbers
{
get;
set;
}
public string dtDateShipped
{
get;
set;
}
public string dSPRatedWeight
{
get;
set;
}
public string nMBTotalBoxes
{
get;
set;
}
public string sShipToAddressLine2
{
get;
set;
}
public string sShipToCountry
{
get;
set;
}
public string ShipToZip
{
get;
set;
}
public string sShipToState
{
get;
set;
}
public string sShipToCity
{
get;
set;
}
public string sShipToAddressLine1
{
get;
set;
}
public string sShipToName
{
get;
set;
}
public string sServiceLevel
{
get;
set;
}
public string sInvoiceNumber
{
get;
set;
}
public string dtInvoiceDate
{
get;
set;
}
public string mInvoiceAmount
{
get;
set;
}
public string dtDateReceived
{
get;
set;
}
public string sStudioCategory2
{
get;
set;
}
public string sStudioCategory1
{
get;
set;
}
public string sOrderSource
{
get;
set;
}
public string sCustomerComments
{
get;
set;
}
public string sCustomerOrderName
{
get;
set;
}
public string sWorkOrderNumber
{
get;
set;
}
public string sCustomerNumber
{
get;
set;
}
}
}
提前感谢您的帮助。 我已经尝试了各种方法来使其正确格式化并且无法使其正常工作。任何指导都会很棒。
【问题讨论】:
-
你的模型是什么样的?
-
Order对象长什么样子? -
请为您的型号添加代码
Order -
我想你可能需要使用
JsonConvert.DeserializeObject<List<Order>>(returnValue)
标签: c# asp.net json asp.net-mvc