Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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# 需要Newtonsoft JSON反序列化帮助_C#_Json_Xamarin.ios_Json.net - Fatal编程技术网

C# 需要Newtonsoft 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":

有人能帮我为我的JSON格式编写Newtonsoft JSON反序列化程序吗

我有以下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"
            }
        }
    }
}
我有以下的班级结构

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