【发布时间】:2017-11-15 14:51:33
【问题描述】:
所以我正在使用 C# 开发 API 包装器,我使用 Newtonsoft.Json 库将 JSON 数据反序列化为响应模型类。在响应模型类中,我有一个子项列表,每个子项都包含一个子项列表。这些是这样定义的:
public List<StatModel> Stats { get; set; }
每个 StatModel 都有一个基本上等于名称的属性:
public Stat Stat { get; set; }
这些是自动反序列化的,因为每个 Stat 都在这样的枚举中定义:
[EnumMember(Value = "Avg Walk Distance")]
AverageWalkDistance,
现在的问题是,如果实际 API 发生变化,包装器将不起作用,因为它没有指定 Stat 的定义。所以这意味着如果他们向 API 添加一个新的 Stat,包装器将无法工作,直到我手动添加它的定义,就像上面的代码块一样。
所以问题是,我怎样才能忽略没有相应 Stat 属性可用的值,或者我可以以某种方式重新设计整个事情,这样就不会发生这种情况?我猜我必须自己定义所有新值。
这是 GitHub 上的项目,可以更好地理解我的真正意思:https://github.com/eklypss/PUBGSharp
请求者进行反序列化并返回一个 StatResponse,其中包含一个名为 StatsRoot 的子项列表,每个子项都有自己的 StatModel 列表,这些 StatModel 是导致此问题的实际 stat 对象。每种类型的 Stat 都在 Enum/Stat.cs 文件中定义。
【问题讨论】:
-
你使用什么 JSON 库来反序列化? JSON.Net 会忽略我认为你没有的属性。
-
是的,我正在使用 Newtonsoft 的 Json.NET。上面的问题确实差不多,不知道除了写一个自定义的 JsonConverter 是否还有其他的解决方案。
-
如果您不想创建自己的转换器,您可以使用exception handling。
标签: c# json serialization json.net deserialization