使用混合键值对和数组解析JSON

时间:2019-01-03 23:07:21

标签: c# json json.net

无法解析中间有数组的键/值混合对。我要么只能获取键/值,要么只能获取数组,但不能两者都获取。

我尝试遵循https://www.newtonsoft.com/json/help/html/SerializingJSON.htm上的文档,但没有找到符合我需要的示例。

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace ParsingJSON
{
    class Program
    {
        static void Main(string[] args)
        {
            // code to deserialize from JSON string to a typed object
            string json = @"{
    'TransferResult': 'SUCCESS',
    'City': 'California',
    'State': 'CA',
    'Applications': [
        {'AppSerial' : 'APX3531'},
        {'AppSerial' : 'APX3263'},
        {'AppSerial' : 'APX3251','OfficialResult' : 'PENDING'},
        {'AppSerial' : 'APX3228'},
        {'AppSerial' : 'APX9521'},
        {'AppSerial' : 'APX3251','OfficialResult' : 'APPROVED'},

    ]}";

            Application app = JsonConvert.DeserializeObject<Application>(json);

            if(app.TransferResult == "SUCCESS")
            {
                // if TransferResult == SUCCESS
                // grab the City, State, AppSerial, and OfficialResult if any
                Console.WriteLine(app.City);
                Console.WriteLine(app.State);
                Console.WriteLine(app.AppSerial); // make key value pairs of AppSerial and values and OfficialResults and results
                Console.WriteLine(app.OfficialResult); // if any
                Console.ReadLine();
            }



        } // Main
        public class Application
        {
            public string TransferResult { get; set; } //SUCCESS or FAIL
            public string City { get; set; } // California.
            public string State { get; set; } // CA
            public string AppSerial { get; set; } // APX12345
            public string OfficialResult { get; set; } // APPROVED, PENDING, ADOPTED
        } //Application

    } // Program
} //namespace

我想获取JSON City,州和该城市的AppSerials以及OfficialResult(如果有)。现在我只得到城市,州名,而AppSerials却一无所获。

2 个答案:

答案 0 :(得分:1)

您需要参加实际的课程

public class Rootobject
{
    public string TransferResult { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public Application[] Applications { get; set; }
}

public class Application
{
    public string AppSerial { get; set; }
    public string OfficialResult { get; set; }
}

,您需要以这种方式反序列化

Rootobject app = JsonConvert.DeserializeObject<Rootobject>(json);

答案 1 :(得分:0)

尝试以下操作:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace ParsingJSON
{
    class Program
    {
        static void Main(string[] args)
        {
            // code to deserialize from JSON string to a typed object
            string json = @"{
    'TransferResult': 'SUCCESS',
    'City': 'California',
    'State': 'CA',
    'Applications': [
        {'AppSerial' : 'APX3531'},
        {'AppSerial' : 'APX3263'},
        {'AppSerial' : 'APX3251','OfficialResult' : 'PENDING'},
        {'AppSerial' : 'APX3228'},
        {'AppSerial' : 'APX9521'},
        {'AppSerial' : 'APX3251','OfficialResult' : 'APPROVED'},

    ]}";

            Application app = JsonConvert.DeserializeObject<Application>(json);

            if(app.TransferResult == "SUCCESS")
            {
                // if TransferResult == SUCCESS
                // grab the City, State, AppSerial, and OfficialResult if any
                Console.WriteLine(app.City);
                Console.WriteLine(app.State);
                Console.WriteLine(app.AppSerial); // make key value pairs of AppSerial and values and OfficialResults and results
                Console.WriteLine(app.OfficialResult); // if any
                Console.ReadLine();
            }



        } // Main

        public class Application
        {
            public string TransferResult { get; set; } //SUCCESS or FAIL
            public string City { get; set; } // California.
            public string State { get; set; } // CA
            public List<ApplicationDetail> Applications { get; set; }
        } //Application

        public class ApplicationDetail
        {
            public string AppSerial { get; set; }
            public string OfficialResult { get; set; }
        } // ApplicationDetail

    } // Program
} //namespace