将具有固定模式的值数组反序列化到强类型数据类
问题:
将特定格式的 JSON 数据反序列化到强类型数据类时,会面临挑战。数据包含一个具有混合字符串和整数值的玩家数组,并且玩家类完全由未命名值组成,且顺序固定。
解决方案:
自定义转换器和数据协定属性的组合允许高效的反序列化:
创建自定义转换器:
实现一个将对象转换为数组的自定义转换器:
<code class="language-c#">public class ObjectToArrayConverter<T> : JsonConverter { // 实现 WriteJson 和 ReadJson 函数 }</code>
将自定义转换器和数据协定属性应用于 Player:
将自定义转换器应用于 Player 类,并使用数据协定属性指定其属性的顺序:
<code class="language-c#">[JsonConverter(typeof(ObjectToArrayConverter<Player>))] [DataContract] public class Player { [DataMember(Order = 1)] public int UniqueID { get; set; } [DataMember(Order = 2)] public string PlayerDescription { get; set; } }</code>
将根对象修改为字典:
将根对象中 players 属性的类型更改为字典,使用玩家用户名作为键:
<code class="language-c#">public class ScoreboardResults { // ... public Dictionary<string, Player> players { get; set; } }</code>
示例:
以下代码示例演示了使用此解决方案进行反序列化:
<code class="language-c#">using Newtonsoft.Json; var json = "{...}"; var results = JsonConvert.DeserializeObject<ScoreboardResults>(json);</code>
其他说明:
以上是如何将混合类型值的 JSON 数组反序列化为强类型 C# 数据类?的详细内容。更多信息请关注PHP中文网其他相关文章!