C# 需要Newtonsoft JSON反序列化帮助
有人能帮我为我的JSON格式编写Newtonsoft JSON反序列化程序吗 我有以下json格式C# 需要Newtonsoft JSON反序列化帮助,c#,json,xamarin.ios,json.net,C#,Json,Xamarin.ios,Json.net,有人能帮我为我的JSON格式编写Newtonsoft JSON反序列化程序吗 我有以下json格式 { "success": true, "message": "Missing ajax operation. Please contact administrator.", "data": { "mode": "new", "data": { "1": { "CustomerCode":
{
"success": true,
"message": "Missing ajax operation. Please contact administrator.",
"data": {
"mode": "new",
"data": {
"1": {
"CustomerCode": "CUST00001",
"Name": "Dell Asia Pacific Sdn. Bhd.",
"Add1": "Plot 76 Mukim 11, Bukit Tengah Industrial Park; Bukit Mertajam; Pulau Pinang; 14000",
"Add2": "",
"Add3": "",
"Daddr1": "Level 21, Suite 21.01, The Gardens South Tower, Mid Valley City, Lingkaran Syed Putra, ; Kuala Lumpur; Wilayah Persekutuan; 59200",
"Daddr2": "",
"Daddr3": "",
"Attn": "",
"Phone": "",
"PhoneA": "",
"Fax": "",
"Area": "",
"Agent": "",
"Email": "",
"CurrCode": "MYR",
"Business": "",
"Term": "30 Days"
},
"2": {
"CustomerCode": "CUST00002",
"Name": "Intel Technology Sdn Bhd",
"Add1": "Bayan Lepas Free Industrial Zone,Phase 3,Halaman Kampung Jawa; Bayan Lepas; Pulau Pinang; 11900",
"Add2": "",
"Add3": "",
"Daddr1": "1st Flr,Standard Chartered Bank Chambers,Lebuh Pantai;Penang; Kuala Lumpur; Wilayah Persekutuan; 10300",
"Daddr2": "",
"Daddr3": "",
"Attn": "",
"Phone": "",
"PhoneA": "",
"Fax": "",
"Area": "",
"Agent": "",
"Email": "",
"CurrCode": "MYR",
"Business": "",
"Term": "30 Days"
},
"3": {
"CustomerCode": "CUST00003",
"Name": "Petronas Carigali Sdn. Bhd.",
"Add1": "Tower 1, Petronas Twin Towers,Kuala Lumpur City Centre,; Kuala Lumpur; Wilayah Persekutuan; 50088",
"Add2": "",
"Add3": "",
"Daddr1": "Tower 1,Petronas Twin Towers,K.L.City Centre; Kuala Lumpur; Wilayah Persekutuan; 50088",
"Daddr2": "",
"Daddr3": "",
"Attn": "",
"Phone": "",
"PhoneA": "",
"Fax": "",
"Area": "",
"Agent": "",
"Email": "",
"CurrCode": "MYR",
"Business": "",
"Term": "30 Days"
}
}
}
}
我有以下的班级结构
public class CustomerInfo
{
public string CustomerCode { get; set; }
public string Name { get; set; }
public string Add1 { get; set; }
public string Add2 { get; set; }
public string Add3 { get; set; }
public string Daddr1 { get; set; }
public string Daddr2 { get; set; }
public string Daddr3 { get; set; }
public string Attn { get; set; }
public string Phone { get; set; }
public string PhoneA { get; set; }
public string Fax { get; set; }
public string Area { get; set; }
public string Agent { get; set; }
public string Email { get; set; }
public string CurrCode { get; set; }
public string Business { get; set; }
public string Term { get; set; }
}
public class CustomerData
{
public CustomerInfo customerInfo { get; set; }
}
public class Data
{
public string mode { get; set; }
public CustomerData custdata { get; set; }
}
public class CustomerRootObject
{
public bool success { get; set; }
public string message { get; set; }
public Data data { get; set; }
}
}
我很难解析我在下面编写的json格式,但它不起任何作用,非常感谢
List<CustomerRootObject> customerlist = JsonConvert.DeserializeObject<List<CustomerRootObject>> (json);
foreach (var info in customerlist) {Console.WriteLine(info.data.custdata.CustomerCode);}
List customerlist=JsonConvert.DeserializeObject(json);
foreach(customerlist中的var info){Console.WriteLine(info.data.custdata.CustomerCode);}
看起来您的JSON格式不正确(或者您的类没有正确的结构)。你能换哪一个
首先,正如@Tobberoth所说,您不应该反序列化到列表
CustomerRootObject customer = JsonConvert.DeserializeObject<CustomerRootObject> (json)
您的JSON属性称为数据。您需要更改其中一个。看起来您的JSON格式不正确(或者您的类没有正确的结构)。你能换哪一个 首先,正如@Tobberoth所说,您不应该反序列化到列表
CustomerRootObject customer = JsonConvert.DeserializeObject<CustomerRootObject> (json)
您的JSON属性称为数据。您需要更改其中一个。这不起作用,因为您的类结构与JSON不匹配 尝试将
数据类更改为:
public class Data
{
public string mode { get; set; }
[JsonProperty("data")]
public Dictionary<int, CustomerInfo> customers { get; set; }
}
它不起作用,因为您的类结构与JSON不匹配
尝试将数据类更改为:
public class Data
{
public string mode { get; set; }
[JsonProperty("data")]
public Dictionary<int, CustomerInfo> customers { get; set; }
}
它以什么方式不起作用?您是否收到错误消息?我没有收到解析问题,但foreach没有被调用。您可能应该调试它,看看发生了什么。但问题是,为什么要反序列化到列表
,而不仅仅是CustomerRotoObject?基本上,我想获取CustomerInfo信息列表。你说的不仅仅是CustomerRotoObject是什么意思。我对c有点陌生。谢谢你的帮助。它在什么方面不起作用?您是否收到错误消息?我没有收到解析问题,但foreach没有被调用。您可能应该调试它,看看发生了什么。但问题是,为什么要反序列化到列表
,而不仅仅是CustomerRotoObject?基本上,我想获取CustomerInfo信息列表。你说的不仅仅是CustomerRotoObject是什么意思。我对c有点陌生。谢谢您的帮助。@user2479042您应该接受Brian Rogers的答案,因为它是完整的,而且有效。实际上我不知道发生了什么。我又接受了。@StephaneDelcroix我总是从那里开始;事实上,我是为了这个答案才这么做的。不幸的是,json2csharp不能处理需要为一系列具有不同键的对象使用字典的情况,就像这里的情况一样。它将为序列中的每个对象生成一个单独的类。(如果属性名称是数字,它将生成丑陋的名称,如\uuuu无效\uu类型\uuuuu 1
)您自己试试看。@user2479042您真的想更改此问题的公认答案吗?另一个答案似乎没有写出来。@user2479042您应该接受Brian Rogers的答案,因为它是完整的,而且有效。实际上我不知道发生了什么。我又接受了。@StephaneDelcroix我总是从那里开始;事实上,我是为了这个答案才这么做的。不幸的是,json2csharp不能处理需要为一系列具有不同键的对象使用字典的情况,就像这里的情况一样。它将为序列中的每个对象生成一个单独的类。(如果属性名称是数字,它将生成丑陋的名称,如\uuuu无效\uu类型\uuuuu 1
)您自己试试看。@user2479042您真的想更改此问题的公认答案吗?另一个答案似乎没有写出来,也不需要更改JSON属性名或类名。正如Brian Rogers在回答中强调的那样,您可以简单地用[JsonProperty(“data”)]修饰class属性,也无需更改JSON属性名或类名。正如Brian Rogers在回答中强调的那样,您可以简单地用[JsonProperty(“数据”)修饰class属性
CustomerRootObject obj = JsonConvert.DeserializeObject<CustomerRootObject>(json);
foreach (KeyValuePair<int, CustomerInfo> kvp in obj.data.customers)
{
Console.WriteLine("----- Customer " + kvp.Key + " -----");
Console.WriteLine("CustomerCode: " + kvp.Value.CustomerCode);
Console.WriteLine("Name: " + kvp.Value.Name);
Console.WriteLine("Add1: " + kvp.Value.Add1.Replace(";", "\r\n"));
}
class Program
{
static void Main(string[] args)
{
string json = @"
{
""success"": true,
""message"": ""Missing ajax operation. Please contact administrator."",
""data"": {
""mode"": ""new"",
""data"": {
""1"": {
""CustomerCode"": ""CUST00001"",
""Name"": ""Dell Asia Pacific Sdn. Bhd."",
""Add1"": ""Plot 76 Mukim 11, Bukit Tengah Industrial Park; Bukit Mertajam; Pulau Pinang; 14000"",
""Add2"": """",
""Add3"": """",
""Daddr1"": ""Level 21, Suite 21.01, The Gardens South Tower, Mid Valley City, Lingkaran Syed Putra, ; Kuala Lumpur; Wilayah Persekutuan; 59200"",
""Daddr2"": """",
""Daddr3"": """",
""Attn"": """",
""Phone"": """",
""PhoneA"": """",
""Fax"": """",
""Area"": """",
""Agent"": """",
""Email"": """",
""CurrCode"": ""MYR"",
""Business"": """",
""Term"": ""30 Days""
},
""2"": {
""CustomerCode"": ""CUST00002"",
""Name"": ""Intel Technology Sdn Bhd"",
""Add1"": ""Bayan Lepas Free Industrial Zone,Phase 3,Halaman Kampung Jawa; Bayan Lepas; Pulau Pinang; 11900"",
""Add2"": """",
""Add3"": """",
""Daddr1"": ""1st Flr,Standard Chartered Bank Chambers,Lebuh Pantai;Penang; Kuala Lumpur; Wilayah Persekutuan; 10300"",
""Daddr2"": """",
""Daddr3"": """",
""Attn"": """",
""Phone"": """",
""PhoneA"": """",
""Fax"": """",
""Area"": """",
""Agent"": """",
""Email"": """",
""CurrCode"": ""MYR"",
""Business"": """",
""Term"": ""30 Days""
},
""3"": {
""CustomerCode"": ""CUST00003"",
""Name"": ""Petronas Carigali Sdn. Bhd."",
""Add1"": ""Tower 1, Petronas Twin Towers,Kuala Lumpur City Centre,; Kuala Lumpur; Wilayah Persekutuan; 50088"",
""Add2"": """",
""Add3"": """",
""Daddr1"": ""Tower 1,Petronas Twin Towers,K.L.City Centre; Kuala Lumpur; Wilayah Persekutuan; 50088"",
""Daddr2"": """",
""Daddr3"": """",
""Attn"": """",
""Phone"": """",
""PhoneA"": """",
""Fax"": """",
""Area"": """",
""Agent"": """",
""Email"": """",
""CurrCode"": ""MYR"",
""Business"": """",
""Term"": ""30 Days""
}
}
}
}";
CustomerRootObject obj = JsonConvert.DeserializeObject<CustomerRootObject>(json);
foreach (KeyValuePair<int, CustomerInfo> kvp in obj.data.customers)
{
Console.WriteLine("----- Customer " + kvp.Key + " -----");
Console.WriteLine("CustomerCode: " + kvp.Value.CustomerCode);
Console.WriteLine("Name: " + kvp.Value.Name);
Console.WriteLine("Add1: " + kvp.Value.Add1.Replace(";", "\r\n"));
}
Console.WriteLine("\nPress a key to Exit...");
Console.ReadKey();
}
public class CustomerInfo
{
public string CustomerCode { get; set; }
public string Name { get; set; }
public string Add1 { get; set; }
public string Add2 { get; set; }
public string Add3 { get; set; }
public string Daddr1 { get; set; }
public string Daddr2 { get; set; }
public string Daddr3 { get; set; }
public string Attn { get; set; }
public string Phone { get; set; }
public string PhoneA { get; set; }
public string Fax { get; set; }
public string Area { get; set; }
public string Agent { get; set; }
public string Email { get; set; }
public string CurrCode { get; set; }
public string Business { get; set; }
public string Term { get; set; }
}
public class Data
{
public string mode { get; set; }
[JsonProperty("data")]
public Dictionary<int, CustomerInfo> customers { get; set; }
}
public class CustomerRootObject
{
public bool success { get; set; }
public string message { get; set; }
public Data data { get; set; }
}
}
----- Customer 1 -----
CustomerCode: CUST00001
Name: Dell Asia Pacific Sdn. Bhd.
Add1: Plot 76 Mukim 11, Bukit Tengah Industrial Park
Bukit Mertajam
Pulau Pinang
14000
----- Customer 2 -----
CustomerCode: CUST00002
Name: Intel Technology Sdn Bhd
Add1: Bayan Lepas Free Industrial Zone,Phase 3,Halaman Kampung Jawa
Bayan Lepas
Pulau Pinang
11900
----- Customer 3 -----
CustomerCode: CUST00003
Name: Petronas Carigali Sdn. Bhd.
Add1: Tower 1, Petronas Twin Towers,Kuala Lumpur City Centre,
Kuala Lumpur
Wilayah Persekutuan
50088