Newtonsoft Json.NET JSONProperty() 需要是任意随机数

Newtonsoft Json.NET JSONProperty() needs to be any random number

我不知道如何用任何数字创建 JSON属性。 例如,我收到的 JSON 从一开始就是这样的:

{ "255710": { "success": true,...

我遇到的具体问题是,第一个数字(在本例中为 255710)可以是任何随机数。因此我不能那么容易反序列化它。

我试过:

[JsonProperty("*")] [JsonProperty()] and [JsonProperty("")] 

但我 运行 没主意了。

这个问题有什么聪明的解决办法吗? 非常感谢您的帮助。

试试这个

var json ="{ \"255710\": { \"success\": true}}";

var dict=JsonConvert.DeserializeObject<Dictionary<string,SuccessClass>>(json);
    
public class SuccessClass
{
    [JsonProperty("success")]
    public bool Success {get; set;}
}

如何使用

var success=dict["255710"].Success; // true

或者如果你更喜欢也可以使用int

var dict=JsonConvert.DeserializeObject<Dictionary<int,SuccessClass>>(json);
var success=dict[255710].Success; //true

或者如果您不知道密钥名称

var key=dict.Keys.First();
    
var success=dict[key].Success; // true

// or if you don't need a key
var successObj=dict.Values.First(); //the whole sucess class
var success=dict.Values.First().Success; //true

有几种方法可以解析这个 JSON。一种方法是使用 JObject 并跳过第一个元素,然后为了方便,转换为 dynamic 如下:

using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Linq;

string json = "{ \"123\": { \"success\": true, \"other\": \"the string\" } }";

JObject obj = JsonConvert.DeserializeObject<JObject>(json);
var dyn = obj.First.First.ToObject<dynamic>();
Console.WriteLine($"dyn.success: {dyn.success}");
Console.WriteLine($"dyn.other: {dyn.other}");

这将输出:

dyn.success: True
dyn.other: the string

我跳过了第一个元素,因为它是随机的,但你应该问问自己它是否真的是随机的。它不是方法调用的 id 吗?如果是,那么您可以更轻松地将其转换为字典,只需读取带有 ID 的密钥即可。

如果您知道结果,您也可以使用强类型 class 作为结果。