将嵌套的json反序列化为字符串属性

时间:2018-03-24 15:44:54

标签: c# json asp.net-core

我有一个包含嵌套json的json文件,我希望在配置绑定时将其反序列化为字符串属性。

这是配置文件:

{
  "Service": {
    "Id": "ccApiMicroservice",
    "Configuration": {
      "Option1": "value1",
      "Option1": "value2"
    }
  }
}

这是相应的配置类:

public class ServiceOptions
{
    public string Id { get; set; }

    [JsonConverter(typeof(JsonStringConverter))]
    public string Configuration { get; set; }
}

我曾尝试使用自定义json转换器将嵌套的json转换为字符串,但绑定机制会忽略转换器(在转换器的方法中有断点,但没有一个被击中),即使我在ConfigureServices中配置了它,如下所示:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().AddJsonOptions(
            options => options.SerializerSettings.Converters.Add(new JsonStringConverter()));

    services.Configure<ServiceOptions>(this.Configuration.GetSection("Service"));
}

我错过了什么?为什么忽略转换器?或者是否有另一种方法如何将嵌套的json反序列化为字符串属性?

修改

我尝试使用自定义JSON转换器的原因是,如果我尝试访问应用程序中任何位置的ServiceOptions实例,我会收到以下异常:

System.InvalidOperationException: 'Cannot create instance of type 'System.String' because it is missing a public parameterless constructor.'

1 个答案:

答案 0 :(得分:0)

以下是一个可能更简单的方法来获取和解析json项目的示例:

JObject config = JObject.Parse(File.ReadAllText("config.json"));
string service_id = (string)config.SelectToken("Service").SelectToken("Id");
Console.WriteLine(service_id);