我需要将以下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; }
}
不适用于数组中的所有对象。
感谢。