构建JSON配置节

有没有办法让配置部分用JSON而不是XML编写?

假设我有以下ConfigurationSection

 public class UsersConfig : ConfigurationSection { [ConfigurationProperty("users", IsRequired = false)] public UserCollection Users { get { return this["users"] as UserCollection; } } } [ConfigurationCollection(typeof(UserElement), AddItemName = "user"] public class UsersCollection : ConfigurationElementCollection { protected override ConfigurationElement CreateNewElement() { return new UserElement(); } protected override object GetElementKey(ConfigurationElement element) { return ((UserElement)element).Name; } } public class UserElement : ConfigurationElement { [ConfigurationProperty("name", IsRequired = true, IsKey = true)] public string Name { get { return this["name"] as string; } set { this["name"] = value; } } } 

然后,我可以创建以下XML配置部分:

       

我想要实现的是保留相同的UsersConfig类 ,但是我想将它映射到JSON,而不是将其映射到XML:

 { "users": [ { "name": "Matt458" }, { "name": "JohnLennon" } ] } 

这个库可能对你有所帮助: https : //github.com/Dynalon/JsonConfig :

从文件:

JsonConfig是一个易于使用的配置库,允许您的C#/ .NET应用程序使用基于JSON的配置文件,而不是繁琐的web.config / application.config xml文件。 它基于JsonFX和C#4.0动态特性。 允许将程序配置文件放入.json文件中,默认配置可以作为资源嵌入或放入(web-)应用程序文件夹中。 可以通过动态类型访问配置,不需要任何自定义类或任何其他存根代码。 JsonConfig支持配置inheritance,这意味着一组配置文件可用于在运行时具有单一的范围配置,这是所有提供的配置文件的合并版本。

如果我理解正确,您基本上希望将web.config部分定义为JSON而不是XML。

目前没有任何开箱即用的function,我所知道的。 但是,一种可能的解决方案是使用Gulp动态编写web.config文件作为构建步骤的一部分。 我没有一个具体的例子,因为我不知道有人这样做,但这可能会给你一个指针。

首先看一下本文,讨论如何使用xmlpoke模块编写XML:

http://www.mikeobrien.net/blog/using-gulp-to-build-and-deploy-dotnet-apps-on-windows/

在Gulp中阅读JSON将是一块蛋糕,所以你只需要将JSON映射到XML。 然后,您可以通过编辑.proj xml文件将Gulp任务添加到构建步骤(gulp应该在正在执行构建的机器上全局安装)。

  1. 在文本编辑器中打开您的proj文件并找到此部分:

          
  2. 用gulp命令替换注释

     gulp taskname 

另一种方法是使用像Newtonsoft这样的库来从磁盘读取JSON文件。 然后创建自己的属性和系统,以便将值映射到类中的属性。 这不是直截了当的,但肯定可以通过一些努力来完成。

我建议使用FX.configuration,你可以从NuGet添加它。 你可以在http://nugetmusthaves.com/Package/FX.Configuration找到它

一些代码示例可以在以下url找到: https : //bitbucket.org/friendlyx/fx.configuration

它使您能够添加到App.config之类的内容:

使用FX.configuration时的另一个选择是添加一个包含所有配置的新config.json文件,并在创建实例时读取并解析它。

以下代码完全符合您对新json配置文件的要求。

 using System.Collections.Generic; using FX.Configuration; namespace JsonConfigurationConsole { class Program { static void Main(string[] args) { var config = new Users(); } } public class Users : JsonConfiguration { public List users { get; set; } } public class User { public string name { get; set; } } } 

您可以更改自己的UsersConfig类,它将能够序列化和反序列化为JSON。 然后编写另一个将从您的文件中检索配置的类。 在app.config中,您可以添加单个设置,该设置将指向存储json配置的位置。

您可以使用Json.Net并向UsersConfig类添加属性来轻松实现此目的。

//将包含在字符串xml中的XML节点转换为JSON字符串

 XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); string jsonText = JsonConvert.SerializeXmlNode(doc); 

//将字符串json中包含的JSON文本转换为XML节点

 XmlDocument doc = JsonConvert.DeserializeXmlNode(json); 

这里的文档: 使用Json.NET在JSON和XML之间进行转换