Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将JSON字符串转换为对象列表_C#_Asp.net_Json - Fatal编程技术网

C# 无法将JSON字符串转换为对象列表

C# 无法将JSON字符串转换为对象列表,c#,asp.net,json,C#,Asp.net,Json,我想将这个JSON字符串转换为C#asp.net中的对象列表 在VS中,我可以看到json字符串如下所示: "{\"orders\":[{\"ItemID\":\"6\",\"Quantity\":\"8\",\"CategoryID\":\"2\",\"Price\":\"0.5\",\"Item

我想将这个JSON字符串转换为C#asp.net中的对象列表

在VS中,我可以看到json字符串如下所示:

"{\"orders\":[{\"ItemID\":\"6\",\"Quantity\":\"8\",\"CategoryID\":\"2\",\"Price\":\"0.5\",\"ItemName\":\"Focaccia\",\"ItemDesc\":\"Focaccia is a flat oven-baked Italian bread similar in style and texture to pizza; in some places, it is called pizza bianca. \",\"ItemImg\":\"Images/Focaccia.jpg\",\"InCart\":1}]}"
{
    "orders": [
        {
            "ItemID": "6",
            "Quantity": "8",
            "CategoryID": "2",
            "Price": "0.5",
            "ItemName": "Focaccia",
            "ItemDesc": "Focaccia is a flat oven-baked Italian bread similar in style and texture to pizza; in some places, it is called pizza bianca. ",
            "ItemImg": "Images/Focaccia.jpg",
            "InCart": 1
        }
    ]
}
但在浏览器本地存储中,json格式良好,如下所示:

"{\"orders\":[{\"ItemID\":\"6\",\"Quantity\":\"8\",\"CategoryID\":\"2\",\"Price\":\"0.5\",\"ItemName\":\"Focaccia\",\"ItemDesc\":\"Focaccia is a flat oven-baked Italian bread similar in style and texture to pizza; in some places, it is called pizza bianca. \",\"ItemImg\":\"Images/Focaccia.jpg\",\"InCart\":1}]}"
{
    "orders": [
        {
            "ItemID": "6",
            "Quantity": "8",
            "CategoryID": "2",
            "Price": "0.5",
            "ItemName": "Focaccia",
            "ItemDesc": "Focaccia is a flat oven-baked Italian bread similar in style and texture to pizza; in some places, it is called pizza bianca. ",
            "ItemImg": "Images/Focaccia.jpg",
            "InCart": 1
        }
    ]
}
我想将其转换为FoodItem对象数组列表,下面是类代码:

    public class FoodItem : Item
    {
        private string quantity;
        private string categoryID;
        private string price;
        private string itemName;
        private string itemDesc;
        private string itemImg;
        private string inCart;

        public FoodItem(string json)
        {
            JObject jObject = JObject.Parse(json);
            JToken jUser = jObject["orders"];
            quantity = (string)jUser["Quantity"];
            categoryID = (string)jUser["CategoryID"];
            price = (string)jUser["Price"];
            itemName =(string)jUser["itemDesc"];
            itemImg = (string)jUser["itemImg"];
            inCart = (string)jUser["inCart"];
        }
}
我在前面的线程中尝试过使用它,但仍然有一条错误消息

Newtonsoft.Json.JsonSerializationException:'无法将当前Json对象(例如{“名称”:“值”})反序列化为类型'System.Collections.Generic.List`1[project.App_Code.FoodItem]',因为该类型需要Json数组(例如[1,2,3])才能正确反序列化

var items=JsonConvert.DeserializeObject(strProductsInCart);

这是因为您需要一个位于顶部的容器类,其中包含此订单列表作为属性:

public class MyData
{
     public List<FoodItem> Orders { get; set; }
{

var data = JsonConvert.DeserializeObject<MyData>(strProductsInCart);
var items = data.Orders;
公共类MyData
{
公共列表顺序{get;set;}
{
var data=JsonConvert.DeserializeObject(strProductsInCart);
var项目=数据。订单;

另外,请确保您有与JSON中的名称匹配的公共属性。它们也可以是Pascal大小写。

这是因为您需要在顶部有一个容器类,其中包含以下订单列表作为属性:

public class MyData
{
     public List<FoodItem> Orders { get; set; }
{

var data = JsonConvert.DeserializeObject<MyData>(strProductsInCart);
var items = data.Orders;
公共类MyData
{
公共列表顺序{get;set;}
{
var data=JsonConvert.DeserializeObject(strProductsInCart);
var项目=数据。订单;
此外,请确保您有与JSON中的名称匹配的公共属性。它们也可以是Pascal大小写。

尝试以下方法:

class Program
{
    static void Main(string[] args)
    {
        string json = "{\"orders\":[{\"ItemID\":\"6\",\"Quantity\":\"8\",\"CategoryID\":\"2\",\"Price\":\"0.5\",\"ItemName\":\"Focaccia\",\"ItemDesc\":\"Focaccia is a flat oven-baked Italian bread similar in style and texture to pizza; in some places, it is called pizza bianca. \",\"ItemImg\":\"Images/Focaccia.jpg\",\"InCart\":1}]}";

        var orderList = JsonConvert.DeserializeObject<OrderList>(json);
       var orders=orderList.Orders;
        
    }
}
public class OrderList
{
    public List<FoodItem> Orders {get; set;}
}
public class FoodItem
{
    public string quantity  {get; set;}
    public string categoryID  {get; set;}
    public string price  {get; set;}
    public string itemName  {get; set;}
    public string itemDesc  {get; set;}
    public string itemImg  {get; set;}
    public string inCart  {get; set;}
}
类程序
{
静态void Main(字符串[]参数)
{
字符串json=“{\'orders\”:[{\'ItemID\”:“6\”,“Quantity\”:“8\”,“CategoryID\”:“2\”,“Price\”:“0.5\”,“ItemName\”:“Focaccia\”,“ItemDesc\”:“Focaccia是一种在风格和质地上与比萨饼相似的平烤箱烘焙意大利面包;在某些地方,它被称为比萨饼bianca.\”,“itemmg\”:“Images/Focaccia.jpg\”,“invot\”,“invot\”):“1];
var orderList=JsonConvert.DeserializeObject(json);
var orders=orderList.orders;
}
}
公共类订单列表
{
公共列表顺序{get;set;}
}
公共类食品
{
公共字符串数量{get;set;}
公共字符串categoryID{get;set;}
公共字符串price{get;set;}
公共字符串itemName{get;set;}
公共字符串itemDesc{get;set;}
公共字符串itemImg{get;set;}
公共字符串形式{get;set;}
}
试试这个:

class Program
{
    static void Main(string[] args)
    {
        string json = "{\"orders\":[{\"ItemID\":\"6\",\"Quantity\":\"8\",\"CategoryID\":\"2\",\"Price\":\"0.5\",\"ItemName\":\"Focaccia\",\"ItemDesc\":\"Focaccia is a flat oven-baked Italian bread similar in style and texture to pizza; in some places, it is called pizza bianca. \",\"ItemImg\":\"Images/Focaccia.jpg\",\"InCart\":1}]}";

        var orderList = JsonConvert.DeserializeObject<OrderList>(json);
       var orders=orderList.Orders;
        
    }
}
public class OrderList
{
    public List<FoodItem> Orders {get; set;}
}
public class FoodItem
{
    public string quantity  {get; set;}
    public string categoryID  {get; set;}
    public string price  {get; set;}
    public string itemName  {get; set;}
    public string itemDesc  {get; set;}
    public string itemImg  {get; set;}
    public string inCart  {get; set;}
}
类程序
{
静态void Main(字符串[]参数)
{
字符串json=“{\'orders\”:[{\'ItemID\”:“6\”,“Quantity\”:“8\”,“CategoryID\”:“2\”,“Price\”:“0.5\”,“ItemName\”:“Focaccia\”,“ItemDesc\”:“Focaccia是一种在风格和质地上与比萨饼相似的平烤箱烘焙意大利面包;在某些地方,它被称为比萨饼bianca.\”,“itemmg\”:“Images/Focaccia.jpg\”,“invot\”,“invot\”):“1];
var orderList=JsonConvert.DeserializeObject(json);
var orders=orderList.orders;
}
}
公共类订单列表
{
公共列表顺序{get;set;}
}
公共类食品
{
公共字符串数量{get;set;}
公共字符串categoryID{get;set;}
公共字符串price{get;set;}
公共字符串itemName{get;set;}
公共字符串itemDesc{get;set;}
公共字符串itemImg{get;set;}
公共字符串形式{get;set;}
}

对于
JObject.Parse
解决方案,您必须将
订单
转换为
JArray
类型

接下来,将其转换为
列表

string json=“{\'orders\”:[{\'ItemID\”:“6\”,“数量”:“8\”,“CategoryID\”:“2\”,“Price\”:“0.5\”,“ItemName\”:“foccia\”,“ItemDesc\”:“foccia是一种在风格和质地上与比萨饼相似的平炉烘焙意大利面包;在某些地方,它被称为比萨饼bianaca.\”,“itemmg\”:“Images/foccia.jpg\”,“invot\”;
JObject=JObject.Parse(json);
JArray ordersArray=jObject[“orders”]作为JArray;
var orders=ordersArray.ToObject();

对于
JObject.Parse
解决方案,您必须将
订单
转换为
JArray
类型

接下来,将其转换为
列表

string json=“{\'orders\”:[{\'ItemID\”:“6\”,“数量”:“8\”,“CategoryID\”:“2\”,“Price\”:“0.5\”,“ItemName\”:“foccia\”,“ItemDesc\”:“foccia是一种在风格和质地上与比萨饼相似的平炉烘焙意大利面包;在某些地方,它被称为比萨饼bianaca.\”,“itemmg\”:“Images/foccia.jpg\”,“invot\”;
JObject=JObject.Parse(json);
JArray ordersArray=jObject[“orders”]作为JArray;
var orders=ordersArray.ToObject();

尝试var items=JsonConvert.DeserializeObject(strProductsInCart->orders);@user10099 OP没有对象列表他们有对象列表在里面你没有食物对象数组你有一个食物对象数组名为orders@user10099我试过了,但在strProductsInCart->orders附近给我错误)@neem这两个字符串是相同的。最上面的一个是转义的(且未转义的)问题是这些类与JSON stringtry var items=JsonConvert.DeserializeObject(strProductsInCart->orders)不匹配;@user10099 OP没有对象列表他们有对象列表在里面你没有食物对象数组你有一个食物对象数组名为orders@user10099我试过了,但在strProductsInCart->orders附近给我错误)@neem这两个字符串是相同的。最上面的一个是转义的(且未转义的)问题是类与JSON不匹配string@neem-我想知道你将如何处理私有价值的对象。你不能使用它们。@neem-我想知道你将如何处理私有价值的对象。你不能使用它们。