使用JSON.net

时间:2016-06-02 22:45:47

标签: c# json

我需要将以下JSON反序列化为C#对象。它有点奇怪的设计。

{
    "2052626192": {
        "p": 0,
        "u": 0,
        "w": ["2052626181", "2052626203"],
        "o": 0,
        "b": 0,
        "df": 0.648749,
        "l": -1,
        "y": -0.178449,
        "s": 0,
        "t": "",
        "n": "DG Suhail 2.151A",
        "a": 0,
        "x": 0.646587
    },
    "2052387279": {
        "b": 1,
        ...
        ...
        ...

整个对象列表代表一个宇宙,每个对象都是该宇宙中的一个星系。每个星系都有唯一的ID来定义物体(等等#34; 2052387279")。

由于此API的属性不是很具描述性,因此我使用了JSON.net的自定义属性指示器。我有一个名为Galaxy的类,看起来像这样。 (请注意,它还不包含JSON中的所有属性。)

namespace SonataKit
{
    public class Galaxy
    {
        // set up some properties
        // API: top level object
        public string ID { get; set; }

        // array of galaxy IDs that are connected
        // API: 'w'
        [JsonProperty("w")]
        public List<string> Connections { get; set; }

        // galaxy name
        // API: 'n'
        [JsonProperty("n")]
        public string Name { get; set; }

        // danger factor
        // API: 'df'
        [JsonProperty("df")]
        public string DangerFactor { get; set; }
        }
}

我有一个名为Universe

的容器类
namespace SonataKit
{
    public class Universe
    {
        public List<Galaxy> Galaxies { get; set; }

        public static void GetListFromJSON(string json)
        {
            var universe = JsonConvert.DeserializeObject<Universe>(json);

            foreach (Galaxy galaxy in galaxies.Galaxies)
            {
                Debug.WriteLine(galaxy);
            }
        }
    }
}

我遇到了一些问题。

如何使用JSON.net获取对象ID名称?因为它被列为对象名而不是键值属性,所以我不确定如何在查看文档后解析它。

澄清 - 我需要从第一个对象获取值2052626192,并将其放入名为Galaxy的{​​{1}}类中的属性中。

使用网站json2csharp.com,当我只输入第一个对象时,我得到以下内容。

ID

显然,这不起作用,因为public class __invalid_type__2052626192 { public int p { get; set; } public int u { get; set; } public List<string> w { get; set; } public int o { get; set; } public int b { get; set; } public double df { get; set; } public int l { get; set; } public double y { get; set; } public int s { get; set; } public string t { get; set; } public string n { get; set; } public int a { get; set; } public double x { get; set; } } public class RootObject { public __invalid_type__2052626192 __invalid_name__2052626192 { get; set; } } 不适用于数组中的所有对象。

感谢。

0 个答案:

没有答案