3 回答

TA貢獻1875條經驗 獲得超3個贊
您可以在反序列化期間使用 aJToken來捕獲您的未知數settings,然后使用第二個屬性來允許您在需要時以字符串形式訪問該 JSON。
像這樣設置你的類:
public class RootObject
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonIgnore]
public string Settings
{
get { return SettingsToken != null ? SettingsToken.ToString(Formatting.None) : null; }
set { SettingsToken = value != null ? JToken.Parse(value) : JValue.CreateNull(); }
}
[JsonProperty("settings")]
private JToken SettingsToken { get; set; }
}
然后像往常一樣反序列化:
var root = JsonConvert.DeserializeObject<RootObject>(json);
該Settings屬性將包含settingsJSON的一部分作為字符串。如果您將對象重新序列化回 JSON,那么settings它將保留它之前的任何結構。
您還可以將該Settings屬性更改為其他一些 JSON 字符串,只要它格式正確。(如果不是,則將立即拋出異常。)
這是一個往返演示:https : //dotnetfiddle.net/thiaWk

TA貢獻1780條經驗 獲得超5個贊
嘗試使用 Newtonsoft.Json 和 LINQ:
string jsonText = @"{
'name': 'foo',
'settings': {
'settings1': true,
'settings2': 1
}
}";
JObject jObj = JObject.Parse(jsonText);
var setting = jObj.Descendants()
.OfType<JProperty>()
.Where(p => p.Name == "settings")
.First()
.Value.ToObject<Settings>();

TA貢獻1841條經驗 獲得超3個贊
嘗試這個:
public class RootObject
{
public string name { get; set; }
public Dictionary<string,object> settings { get; set; }
}
小提琴:https : //dotnetfiddle.net/QN3nWL
- 3 回答
- 0 關注
- 402 瀏覽
添加回答
舉報