我有一个示例json文件,如下所示。
{
"TestOneConfig": {
"SvcUrl": "www.abc.com/",
"Port": "3455"
},
"LiveTestConfig": {
"ConnString": "abcd"
}
}
我有#34; TestOneConfig"如下
public class TestOneConfig
{
public string SvcUrl { get; set; }
public string Port { get; set; }
}
如何反序列化" TestOneConfig"类模型的子项。
我尝试如下,但没有奏效。我用过NewtonJsoft。
using (StreamReader reader = new StreamReader("appsettings.json"))
{
var settingsJson = reader.ReadToEnd();
dynamic settings1 = JsonConvert.DeserializeObject<object>(settingsJson);
dynamic settings2 = JsonConvert.DeserializeObject<TestOneConfig>(settings1.TestOneConfig);
}
答案 0 :(得分:1)
假设您正在使用Json.NET,您可以执行以下操作:
var jsonObj = JObject.Parse(json);
var testOneConfig = JsonConvert.DeserializeObject<TestOneConfig>(jsonObj["TestOneConfig"].ToString());
或者,您可以使用包含整个json字符串的jsonObj
变量,而不是反序列化单个属性,以访问所需的字段:
var testOneConfigSvcUrl = jsonObj["TestOneConfig"]["SvcUrl"].ToString();
var testOneConfigPort = jsonObj["TestOneConfig"]["Port"].ToString();
var liveTestConfigConnString = jsonObj["LiveTestConfig"]["ConnString"].ToString();
答案 1 :(得分:0)
谢谢@PoweredByOrange。这有帮助。由于我使用的是NewtonJsoft,因此只更改了格式。它变成如下
using (StreamReader reader = new StreamReader("appsettings.json"))
{
dynamic settingsJson = reader.ReadToEnd();
var settings = JObject.Parse(settingsJson);
var testOneConfigObj = JsonConvert.DeserializeObject<TestOneConfig>(settings.TestOneConfig.ToString());
}