【发布时间】:2018-03-27 11:02:55
【问题描述】:
我正在尝试将字符串 json 转换为 c# 对象,
我已经在这里阅读了几个关于类似问题的回复,但没有一个解决方案有效。
这是 json 对象
{
"Customer": {
"data_0": {
"id": "273714",
"FirstName": "Zuzana",
"LastName": "Martinkova"
},
"data_1": {
"id": "274581",
"FirstName": "Ricardo",
"LastName": "Lambrechts"
},
"data_2": {
"id": "275190",
"FirstName": "Daniel",
"LastName": "Mojapelo"
},
"data_3": {
"id": "278031",
"FirstName": "Sulochana",
"LastName": "Chandran"
}
}
}
我根据json obj创建了以下对象
public class Customer
{
public List<Data> Customers{ get; set; }
public Customer()
{
Customers = new List<Data>();
}
}
public class Data
{
public string id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
至于我的代码,我制作了一个小型控制台应用程序示例,其中包含我在这里找到的所有独奏
static void Main(string[] args)
{
try
{
string jsonString = File.ReadAllText(ConfigurationSettings.AppSettings["filepath"].ToString());
//solution 1
JObject jsonone = JObject.Parse(jsonString);
var collection_one = jsonone.ToObject<Customer>();
//solution 2
JavaScriptSerializer serializer = new JavaScriptSerializer();
var collection_two = serializer.Deserialize<Customer>(jsonString);
//solution 2
var collection_three = JsonConvert.DeserializeObject<Customer> (jsonString);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message); ;
}
Console.ReadKey();
}
我从第 3 方网络服务获得的 json 字符串,因此仅举个例子,我正在从 txt 文件中读取 json,
读取后的jsonString参数值为:
"{\"Customer\":{\"data_0\":{\"id\":\"273714\",\"FirstName\":\"Zuzana\",\"LastName\":\"Martinkova\"},\"data_1\":{\"id\":\"274581\",\"FirstName\":\"Ricardo\",\"LastName\":\"Lambrechts\"},\"data_2\":{\"id\":\"275190\",\"FirstName\":\"Daniel\",\"LastName\":\"Mojapelo\"},\"data_3\":{\"id\":\"278031\",\"FirstName\":\"Sulochana\",\"LastName\":\"Chandran\"}}}"
在我使集合计数为 0 的每个解决方案中,数据对象不包括在列表中。
谁能解释一下,告诉我哪里出了问题?
在此先感谢
【问题讨论】:
-
你需要两个类,保留你的
Data类,你需要另一个类,它有一个名为“Customer”的Dictionary<string, Data>属性。如果您想拥有不同的 C# 属性名称,那么您需要使用 JSON.NET[JsonProperty(name="")]属性的 JSON -
@maccettura 但我有 2 个课程,1 个用于
data,2 个有list<data> -
你的 JSON 不是一个列表,它是一个字典。您的属性称为“客户”,您的 JSON 明确标记为“客户”
-
您没有任何名为
Data的对象,您有一个data_01和一个data_02,等等,所以,就像@maccettura 所说,您没有@ 列表987654333@,你有一个Dictionary<string, Data>; -
@maccettura 您的解决方案解决了它,我没有意识到字典会有所不同。谢谢