我有一個接收 JSON 字串并將其反序列化為動態的 C# 類。
json = @"{
"Id": "97dc4a96-43cf-48bd-9358-8f33e910594e",
"RepId": 90037,
"Something": true,
"SomethingElse": "abcdefg",
"Thing_1_of_MaybeDozens": 55
}";
dynamic jsonData = JsonConvert.DeserializeObject(json);
我不能反序列化到一個類中,因為雖然每個 JSON 字串總是有兩個已知的資料元素(Id和RepId),但字串的其余部分可能有很多我事先不知道它們的名稱的元素,或者它們中有多少有。
我總是可以要求jsonData.Id, or jsonData.RepId,但我不知道可能還有多少其他元素,也不知道如何參考它們。
我需要類似于 JavaScript 的Object.Keys(myObject).
任何人都知道如何在 C# 中使用 Newtonsoft 反序列化 JSON 字串做類似的事情?
uj5u.com熱心網友回復:
您可以使用反射:
public Dictionary<string, object> DynamicToDictionary(dynamic obj)
{
var dict = new Dictionary<string, object>();
foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(obj))
{
object obj2 = propertyDescriptor.GetValue(obj);
dict.Add(propertyDescriptor.Name, obj2);
}
return dict;
}
現在您可以使用字典的TryGetValue(), 和ContainsKey().
uj5u.com熱心網友回復:
嘗試使用 Newtonsoft.Json 擴展
var data = JsonConvert.DeserializeObject<Data>(json);
鍵串列
List<string> additionalKeys=data.AdditionalData.Select(ad => ad.Key).ToList();
輸出
["Something","SomethingElse","Thing_1_of_MaybeDozens"]
如何使用
var id = data.Id; //97dc4a96-43cf-48bd-9358-8f33e910594e
var somethingElse = data.AdditionalData["SomethingElse"]; // abcdefg
班級
public class Data
{
// normal deserialization
public string Id { get; set; }
public long RepId { get; set; }
//additional data
[JsonExtensionData]
public Dictionary<string, object> AdditionalData {get;set;}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412320.html
標籤:
下一篇:C 中的json配置閱讀器
