我有看起来像这样的 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.Net
和JsonSerializationAttributes
将对象属性转换为数组?
如果您使用的是 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);
然后,您可以循环访问字典