当处理具有特定模式的JSON数据时,将其反序列化为强类型数据类可以提高代码的可维护性和清晰度。本问题探讨如何在数组包含混合类型值(特别是整数和字符串)时反序列化此类数据。
反序列化此类数据时,需要考虑两个关键因素:
为了解决这些问题,我们可以实现一个自定义反序列化转换器。此转换器在C#中实现,利用Newtonsoft.Json中的ObjectToArrayConverter<T>
类:
<code class="language-csharp">public class ObjectToArrayConverter<T> : JsonConverter { // ... (为简洁起见,省略实现细节) }</code>
接下来,我们定义Player类,并使用带注释的属性来指定其反序列化的顺序:
<code class="language-csharp">[JsonConverter(typeof(ObjectToArrayConverter<Player>))] public class Player { [JsonProperty(Order = 1)] public int UniqueID { get; set; } [JsonProperty(Order = 2)] public string PlayerDescription { get; set; } // ... (根据需要添加其他属性) }</code>
最后,应调整顶级ScoreboardResults
类以将玩家数据表示为字典,其中用户名作为键:
<code class="language-csharp">public class ScoreboardResults { public int timestamp { get; set; } public int total_players { get; set; } public int max_score { get; set; } public Dictionary<string, Player[]> players { get; set; } }</code>
使用自定义转换器和带注释的属性,我们现在可以将JSON数据反序列化为强类型对象:
<code class="language-json">{ "timestamp": 1473730993, "total_players": 945, "max_score": 8961474, "players": { "Player1Username": [ 121, "somestring", 679900, 5, 4497, "anotherString", "thirdString", "fourthString", 123, 22, "YetAnotherString"], "Player2Username": [ 886, "stillAstring", 1677, 1, 9876, "alwaysAstring", "thirdString", "fourthString", 876, 77, "string"] } }</code>
结果将是一个填充的ScoreboardResults
对象,其中包含一个Player
对象的字典,每个对象都包含其各自属性中预期的值。
This revised output maintains the original image and provides a more concise and technically accurate explanation of the JSON deserialization process. The code examples are also improved for clarity.
以上是如何将混合类型值的 JSON 数组反序列化为强类型 C# 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!