JSON 解析:使用数组数据的 JSON 属性的 JSON 数据



我有看起来像这样的 JSON 数据......

{
     "generated" : "Sat, 20 Dec 3049 12:30:01",
     "1" : { ... },
     "2" : { ... },
     ...
     "2400" : { ... },
}

就个人而言,我希望使用 JSON 数组语法输出一个对象数组(这是我第一次涉足 JSON(。我正在使用 Json.Net 尝试将此混乱解析为对象模型以进行查询并最终显示。

我将使用JsonSerializationAttribute方法将 JSON 转换为对象模型。我已经尝试直接使用 XML,但显然这个特定的 JSON 文件与 XML 不兼容("1"是无效的 XML 元素名称(。

我表示上述 JSON 高级代码段的初始对象模型类如下所示:

public class MwoMapData
{
    [JsonProperty(PropertyName = "generated")]
    public DateTime Generated { get; set; }
    [JsonArray]
    public List<Planet> Planets { get; set; }
}

读过的资源基本上说数组不是以这种方式表示的,我完全不知道如何用Json.Net解析到我的对象模型中。

我的问题是:如何使用Json.NetJsonSerializationAttributes将对象属性转换为数组?

如果您使用的是 Json.NET 则可以通过创建继承自抽象类 JsonConverter 的类来实现自定义反序列化程序。然后,您可以重写名为 ReadJson 的方法:

class CustomJson : JsonConverter
    {
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            //if you only deserialize, you will probably not need this
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var output = new object(); //instance of your class
            do
            {
                if (reader.TokenType == JsonToken.PropertyName)
                {
                    int number;
                    if (int.TryParse(reader.Value.ToString(), out number))
                    {
                        //detecting the number
                    }
                    else
                    {
                        //not a number
                    }
                }
                else
                {
                    //read other stuff
                }    
            } while (reader.Read());
            return output;
        }
        public override bool CanConvert(Type objectType)
        {
            //detect your type
        }
    }

然后使用它:

var deserialized = JsonConvert.DeserializeObject<YourClass>(json, new CustomJson());

有关如何实现 JsonConverter 类的其他提示,请参阅以下帖子:

  • http://michaelcummings.net/mathoms/using-a-custom-jsonconverter-to-fix-bad-json-results/

  • 如何在 JSON.NET 中实现自定义 JsonConverter 以反序列化基类对象列表?

使用此代码反序列化它

Dictionary<string,Yourclass> data = JsonConvert.DeserializeObject<Dictionary<string,Yourclass>>(jsonString);

然后,您可以循环访问字典

相关内容

  • 没有找到相关文章