如何将Json子属性转换为所需的对象?

时间:2018-03-15 17:25:21

标签: c# json

我有一个示例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);
                }

2 个答案:

答案 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());                    
    }