c# - 如何使用 JSON.NET 将 JSON 数组中的对象名称用作属性值?
问题描述
我有以下 JSON 块(从完整的 JSON 中提取以简化问题):
"statistics": [
{
"Strength": {
"min": 16,
"max": 20
}
},
{
"Dexterity": {
"min": 16,
"max": 20
}
}]
我想将“统计”数组反序列化为“统计”对象的 C# 数组,但我找不到如何做到这一点...每个统计对象的键可以是任何东西:“强度”、“运气” ","Dexterity" 等等,每个键都是唯一的。
C# 数据对象将是这样的:
public class Container
{
public Statistic[] Statistics { get; set; }
}
public class Statistic
{
//Contains the name of the statistic
public string Name { get; set; }
public int Min { get; set; }
public int Max { get; set; }
}
也许我可以通过删除属性并创建所有可能的统计类来使用某种多态性Name
,但这会破坏我的代码的适应性。
十分感谢。
解决方案
您可以使用简单JsonConverter
的Statistic
类来处理这个棘手的 JSON,如下所示:
class StatisticConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Statistic);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
JProperty prop = jo.Properties().First();
Statistic stat = new Statistic
{
Name = prop.Name,
Min = (int)prop.Value["min"],
Max = (int)prop.Value["max"]
};
return stat;
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
要使用它,[JsonConverter]
向类添加一个属性Statistic
,它应该可以按预期工作:
[JsonConverter(typeof(StatisticConverter))]
public class Statistic
{
public string Name { get; set; }
public int Min { get; set; }
public int Max { get; set; }
}
这是一个工作演示:https ://dotnetfiddle.net/H7wR0g
如果您不能(或不想)向Statistic
类添加属性,也可以通过将转换器传递给如下DeserializeObject
方法来使用转换器:
var container = JsonConvert.DeserializeObject<Container>(json, new StatisticConverter());
推荐阅读
- python - 即使在显式定义之后,输入 (n,n,1) 与 (n,n) 的尺寸也会出现错误
- git - 我怎样才能最简单地重新组织一个 git 存储库?
- javascript - jQuery 是否空分离通过 addEventListener 附加的侦听器?
- ios - 无法对 SKPhysicsbody 施加脉冲
- java - 使用 Jackson 将 POJO 序列化为 xml 时删除 xml 包装器
- matplotlib - RuntimeError:动画函数必须返回一系列 Artist 对象
- java - javax.sql.DataSource BeanCurrentlyInCreationException(循环引用?)
- node.js - MySQL函数返回未定义,但确实连接
- java - 我遇到了字符串和整数以及转换 Java 的错误
- php - Illegal Instruction (core dumped) with Tensorflow 1.5