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 关注
- 354 浏览
添加回答
举报