从 MVC 中的 WCF 服务反序列化 Json 时出错
Error while deserializing Json from WCF service in MVC
我从 MVC5 项目调用 Rest wcf 服务。我尝试序列化 Jason 以将其发送给查看,但出现错误。
这是我调用服务和 return Json 的控制器代码。
public class CustomerController : Controller
{
readonly string customerServiceUri = "http://localhost:63674/CSA.svc/";
// GET: /Customer/
public ActionResult Index()
{
object customerList = null;
using (WebClient webclient = new WebClient())
{
string jsonStr;
jsonStr = webclient.DownloadString(customerServiceUri + "GetAllCustomers");
customerList = JsonConvert.DeserializeObject<List<Customer>>(jsonStr);
}
return View(customerList);
}
jsonStr 变量具有以下值:
{"GetAllCustomersResult":[{"Account_Number":"7000019000415","Account_Payment_Status":null,"Account_Status":null,"Create_Date":null,"Customer_ID":9000415,"Email":null,"First_Name":"IMAD","Last4SSN":null,"LastPayment_Amount":null,"Last_Name":"KAMAR","Last_Payment_Date":null,"Modified_Date":null,"Online_Agreement":false,"Payment_in":null,"Username":null,"isActivated":假,"isActive":假,"isLocked":假,"isRegistered":假,"unsuccessful_login_count":0},
但是我在灭菌线中遇到错误,这是错误:
无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[CSAMVCCALLService.Models.Customer]',因为该类型需要一个 JSON 数组(例如 [1,2,3]) 以正确反序列化。
要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是基本类型像整数,而不是像数组或列表这样的集合类型),可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型以强制它从 JSON 对象反序列化。
路径 'GetAllCustomersResult',第 1 行,位置 25.
您的 json 不是数组或列表。它是一个单一的对象。所以你的代码应该是这样的
var result = JsonConvert.DeserializeObject<Result>(jsonStr);
public class Customer
{
public string Account_Number { get; set; }
public object Account_Payment_Status { get; set; }
public object Account_Status { get; set; }
public object Create_Date { get; set; }
public int Customer_ID { get; set; }
public object Email { get; set; }
public string First_Name { get; set; }
public object Last4SSN { get; set; }
public object LastPayment_Amount { get; set; }
public string Last_Name { get; set; }
public object Last_Payment_Date { get; set; }
public object Modified_Date { get; set; }
public bool Online_Agreement { get; set; }
public object Payment_in { get; set; }
public object Username { get; set; }
public bool isActivated { get; set; }
public bool isActive { get; set; }
public bool isLocked { get; set; }
public bool isRegistered { get; set; }
public int unsuccessful_login_count { get; set; }
}
public class Result
{
public List<Customer> GetAllCustomersResult { get; set; }
}
顺便说一句:我使用 http://json2csharp.com/ 从您的 json 创建了 c# 类。
我从 MVC5 项目调用 Rest wcf 服务。我尝试序列化 Jason 以将其发送给查看,但出现错误。 这是我调用服务和 return Json 的控制器代码。
public class CustomerController : Controller
{
readonly string customerServiceUri = "http://localhost:63674/CSA.svc/";
// GET: /Customer/
public ActionResult Index()
{
object customerList = null;
using (WebClient webclient = new WebClient())
{
string jsonStr;
jsonStr = webclient.DownloadString(customerServiceUri + "GetAllCustomers");
customerList = JsonConvert.DeserializeObject<List<Customer>>(jsonStr);
}
return View(customerList);
}
jsonStr 变量具有以下值:
{"GetAllCustomersResult":[{"Account_Number":"7000019000415","Account_Payment_Status":null,"Account_Status":null,"Create_Date":null,"Customer_ID":9000415,"Email":null,"First_Name":"IMAD","Last4SSN":null,"LastPayment_Amount":null,"Last_Name":"KAMAR","Last_Payment_Date":null,"Modified_Date":null,"Online_Agreement":false,"Payment_in":null,"Username":null,"isActivated":假,"isActive":假,"isLocked":假,"isRegistered":假,"unsuccessful_login_count":0},
但是我在灭菌线中遇到错误,这是错误:
无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[CSAMVCCALLService.Models.Customer]',因为该类型需要一个 JSON 数组(例如 [1,2,3]) 以正确反序列化。 要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是基本类型像整数,而不是像数组或列表这样的集合类型),可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型以强制它从 JSON 对象反序列化。 路径 'GetAllCustomersResult',第 1 行,位置 25.
您的 json 不是数组或列表。它是一个单一的对象。所以你的代码应该是这样的
var result = JsonConvert.DeserializeObject<Result>(jsonStr);
public class Customer
{
public string Account_Number { get; set; }
public object Account_Payment_Status { get; set; }
public object Account_Status { get; set; }
public object Create_Date { get; set; }
public int Customer_ID { get; set; }
public object Email { get; set; }
public string First_Name { get; set; }
public object Last4SSN { get; set; }
public object LastPayment_Amount { get; set; }
public string Last_Name { get; set; }
public object Last_Payment_Date { get; set; }
public object Modified_Date { get; set; }
public bool Online_Agreement { get; set; }
public object Payment_in { get; set; }
public object Username { get; set; }
public bool isActivated { get; set; }
public bool isActive { get; set; }
public bool isLocked { get; set; }
public bool isRegistered { get; set; }
public int unsuccessful_login_count { get; set; }
}
public class Result
{
public List<Customer> GetAllCustomersResult { get; set; }
}
顺便说一句:我使用 http://json2csharp.com/ 从您的 json 创建了 c# 类。