我试图反序列化以下json对象但是出错了,我想做的就是把json放到c#List中:
public class CardTextModel
{
public string prod_Code { get; set; }
public string page1Text { get; set; }
public string insideText { get; set; }
public string userName { get; set; }
public Nullable<System.DateTime> exportDate { get; set; }
public List<CardTextModel> card_Text { get; set; }
}
这是我尝试反序列化json的地方
class Program
{
static void Main(string[] args)
{
try
{
var content = @"{
""card_Text"": [
{
""prod_Code"": ""G01Q0320WS"",
""page1Text"": ""SHORTY SET SZ 10"",
""insideText"": ""SHORTY SET SZ 10"",
""userName"": ""daz"",
""exportDate"": null
},
{
""prod_Code"": ""G01Q0380"",
""page1Text"": ""TREE DECS SET 4 RESIN"",
""insideText"": ""TREE DECS SET 4 RESIN"",
""userName"": ""mark"",
""exportDate"": null
}
]
}";
var model = JsonConvert.DeserializeObject<List<CardTextModel>>(content);
}
catch (Exception ex)
{
}
}
}
当我尝试取消激活我的json对象时,我收到以下错误
无法将当前JSON对象(例如{&#34; name&#34;:&#34; value&#34;})反序列化为类型System.Collections.Generic.List`1 [CardTextModel]& #39;因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。 要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是类似的集合类型可以从JSON对象反序列化的数组或List。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。 路径&#39; card_Text&#39;,第2行,第30位。
我使用的是Newtonsoft.Json 9.0.0.0
感谢您的帮助
答案 0 :(得分:1)
你的json应该是这样的:
var content = @"[
{
""prod_Code"": ""G01Q0320WS"",
""page1Text"": ""SHORTY SET SZ 10"",
""insideText"": ""SHORTY SET SZ 10"",
""userName"": ""daz"",
""exportDate"": null
},
{
""prod_Code"": ""G01Q0380"",
""page1Text"": ""TREE DECS SET 4 RESIN"",
""insideText"": ""TREE DECS SET 4 RESIN"",
""userName"": ""mark"",
""exportDate"": null
}
]";
var model = JsonConvert.DeserializeObject<List<CardTextModel>>(content);
或者您的对象需要更改以支持根元素card_Text
。
public class CardTextModel
{
public string prod_Code { get; set; }
public string page1Text { get; set; }
public string insideText { get; set; }
public string userName { get; set; }
public Nullable<System.DateTime> exportDate { get; set; }
public List<CardTextModel> card_Text { get; set; }
}
public class CardTextModelRoot
{
public List<CardTextModel> card_Text {get;set;}
}
var content = @"{
""card_Text"": [
{
""prod_Code"": ""G01Q0320WS"",
""page1Text"": ""SHORTY SET SZ 10"",
""insideText"": ""SHORTY SET SZ 10"",
""userName"": ""daz"",
""exportDate"": null
},
{
""prod_Code"": ""G01Q0380"",
""page1Text"": ""TREE DECS SET 4 RESIN"",
""insideText"": ""TREE DECS SET 4 RESIN"",
""userName"": ""mark"",
""exportDate"": null
}
]
}";
var model = JsonConvert.DeserializeObject<CardTextModelRoot>(content);
答案 1 :(得分:1)
因为在你的json中你有一个属性card_Text
,它被分配给数组。修改你的json或添加一个相同的存根类。
修改后的代码
public class ModelHolder{
public List<CardTextModel> card_Text {get;set;}
}
在您的反序列化代码中
var model = JsonConvert.DeserializeObject<ModelHolder>(content);
修改了json
var content = @"[
{
""prod_Code"": ""G01Q0320WS"",
""page1Text"": ""SHORTY SET SZ 10"",
""insideText"": ""SHORTY SET SZ 10"",
""userName"": ""daz"",
""exportDate"": null
},
{
""prod_Code"": ""G01Q0380"",
""page1Text"": ""TREE DECS SET 4 RESIN"",
""insideText"": ""TREE DECS SET 4 RESIN"",
""userName"": ""mark"",
""exportDate"": null
}
]";
答案 2 :(得分:0)
您的内容不是数组,而是包含一个字段&#34; card_Text&#34;的JSON对象,其中包含您正在寻找的数组。
将DeserializeObject的类型参数修改为类,例如
class CardTextWrapperModel
{
public List<CardTextModel> card_Text { get; set; }
}
或直接传递数组而不使用外部对象:
var content = @"[
{
""prod_Code"": ""G01Q0320WS"",
""page1Text"": ""SHORTY SET SZ 10"",
""insideText"": ""SHORTY SET SZ 10"",
""userName"": ""daz"",
""exportDate"": null
},
{
""prod_Code"": ""G01Q0380"",
""page1Text"": ""TREE DECS SET 4 RESIN"",
""insideText"": ""TREE DECS SET 4 RESIN"",
""userName"": ""mark"",
""exportDate"": null
}
]";
答案 3 :(得分:0)
你的JSON不是一个数组,它是一个有一个名为&#34; card_Text&#34;这是一个数组。 试试这个:
public class CardsModel
{
public List<CardTextModel> card_Text { get; set; }
}
public class CardTextModel
{
public string prod_Code { get; set; }
public string page1Text { get; set; }
public string insideText { get; set; }
public string userName { get; set; }
public Nullable<System.DateTime> exportDate { get; set; }
public List<CardTextModel> card_Text { get; set; }
}
var model = JsonConvert.DeserializeObject<CardsModel>(content);
答案 4 :(得分:0)
要进一步了解流程,您可以选择测试对象与实际JSON转换的兼容性。尝试从“CardTextModel”对象列表生成JSON字符串。
var cardList = new List<CardTextModel>(){
new CardTextModel{
prod_Code = "G01Q0320WS",
page1Text = "SHORTY SET SZ 10",
insideText = "SHORTY SET SZ 10",
userName = "daz",
exportDate = null
},
new CardTextModel{
prod_Code = "G01Q0380",
page1Text = "TREE DECS SET 4 RESIN",
insideText = "TREE DECS SET 4 RESIN",
userName = "mark",
exportDate = null
},
};
string output = JsonConvert.SerializeObject(cardList);
输出结果为:
"[{\"prod_Code\":\"G01Q0320WS\",\"page1Text\":\"SHORTY SET SZ 10\",\"insideText\":\"SHORTY SET SZ 10\",\"userName\":\"daz\",\"exportDate\":null},{\"prod_Code\":\"G01Q0380\",\"page1Text\":\"TREE DECS SET 4 RESIN\",\"insideText\":\"TREE DECS SET 4 RESIN\",\"userName\":\"mark\",\"exportDate\":null}]"
因此,我们现在可以使用输出作为基础。 回到你的问题,这是实际的代码。
class Program
{
static void Main(string[] args)
{
var content = "[{\"prod_Code\":\"G01Q0320WS\",\"page1Text\":\"SHORTY SET SZ 10\",\"insideText\":\"SHORTY SET SZ 10\",\"userName\":\"daz\",\"exportDate\":null},{\"prod_Code\":\"G01Q0380\",\"page1Text\":\"TREE DECS SET 4 RESIN\",\"insideText\":\"TREE DECS SET 4 RESIN\",\"userName\":\"mark\",\"exportDate\":null}]";
var model = JsonConvert.DeserializeObject<List<CardTextModel>>(content);
}
}
模型的值应该是:
希望这有帮助! :)
答案 5 :(得分:0)
不确定(没时间检查)但希望它有所帮助。 尝试:
SELECT p1.idA, p1.idB, p1.descriptionNTEXT
FROM p1 product
WHERE EXISTS
(
SELECT 1
FROM p product, o order, c customer
WHERE o.productID = p.idA AND o.subProductID = p.idB AND o.customerID = c.ID
AND p1.idA = p.ida
AND p1.idB = p.idb
)
真的希望它有帮助))。