2 回答

TA貢獻1906條經驗 獲得超10個贊
您可以使用JPath查詢來實現您的目標,如下所示:
var myArray = JObject
? ? .Parse(json)
? ? .SelectTokens("$.Test..name")
? ? .Values<string>()
? ? .Select(s => new Class1(s))
? ? .ToArray();
但可能不是最好的方法。
我個人更喜歡創建類來表示 json 結構,然后應用轉換。
void Main()
{
? ? var json = @"{""Test"": {
? ? ? ? ""KIf42N7OJIke57Dj6dkh"": {
? ? ? ? ? ? ""name"": ""test 1""
? ? ? ? ? ? },
? ? ? ? ? ? ""xsQMe4WWMu19qdULspve"": {
? ? ? ? ? ? ""name"": ""test 2""
? ? ? ? ? ? }
? ? }
? ? }";
? ? var root = JsonConvert.DeserializeObject<Root>(json);
? ? var array = root.Test.Select(i => i.Value).ToArray();
? ? array.Dump();
}
public class Root
{
? ? public Dictionary<string, Class1> Test { get; set; }
}
public class Class1
{
? ? public string Name { get; set; }
? ? public Class1(string name)
? ? {
? ? ? ? Name = name;
? ? }
}

TA貢獻1877條經驗 獲得超6個贊
首先,您的 Json 缺少開始/結束大括號。Json 需要用大括號括住 Test 值。
{
? ? 'Test':?
? ? {
? ? ? ? ? ? 'KIf42N7OJIke57Dj6dkh': {'name': 'test 1'},
? ? ? ? ? ? 'xsQMe4WWMu19qdULspve': {'name': 'test 2'}
? ? }
}
如果原始 Json 中缺少它,您可以將當前輸入的 Json 包裝如下。
var correctedJson = $"{{{inputJsonString}}}";
如果您想將 Json 對象解析為數組Class1
?而不創建額外的具體數據結構并使用JPath Queries,您可以使用Json.Net 證明的DeserializeAnonymousTypeAnonymous Types
方法來實現此目的。例如,
var sampleObject = new {Test = new Dictionary<string,Class1>()};
var data = JsonConvert.DeserializeAnonymousType(correctedJson,sampleObject);
var result = data.Test.Select(x=>x.Value).ToArray();
您還可以使用 JPath 查詢或創建具體數據結構作為@Kalten 來實現它,如他的答案中所述。
- 2 回答
- 0 關注
- 181 瀏覽
添加回答
舉報