有没有办法让配置部分用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配置部分:
<users-config>
<users>
<user name="Matt458" />
<user name="JohnLennon" />
</users>
</users-config>
我想要实现的是保持相同的UsersConfig类,但我不想将其映射到XML,而是将其映射到JSON:
{
"users": [
{
"name": "Matt458"
},
{
"name": "JohnLennon"
}
]
}
答案 0 :(得分:2)
此库可能会对您有所帮助:https://github.com/Dynalon/JsonConfig:
来自文档:
JsonConfig是一个易于使用的配置库,允许使用JSON 基于C#/ .NET应用程序的配置文件,而不是繁琐的 web.config / application.config xml文件。它基于JsonFX和C# 4.0动态功能。允许将程序配置文件放入.json文件中,默认配置可以作为资源嵌入 放入(web-)应用程序文件夹。可以通过访问配置 动态类型,没有自定义类或任何其他存根代码是必要的。 JsonConfig支持配置继承,这意味着一组 配置文件可用于具有单个范围的配置 在运行时,它是所有提供的配置的合并版本 文件。
答案 1 :(得分:1)
如果我理解正确,您基本上希望将web.config部分定义为JSON而不是XML。
目前我所知道的没有任何开箱即用的功能。但是,一种可能的解决方案是使用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应该在正在执行构建的机器上全局安装)。
在文本编辑器中打开您的proj文件并找到此部分:
<Project>
<Target Name="BeforeBuild">
<!-- Insert tasks to run before build here -->
</Target>
</Project>
用gulp命令替换注释
gulp taskname
另一种方法是使用像Newtonsoft这样的库从磁盘读取JSON文件。然后创建自己的属性和系统,以便将值映射到类中的属性。这不是直截了当的,但肯定可以通过一些努力来完成。
答案 2 :(得分:1)
我建议使用FX.configuration,您可以从NuGet添加它。 你可以在http://nugetmusthaves.com/Package/FX.Configuration
找到它可以在https://bitbucket.org/friendlyx/fx.configuration
找到一些代码示例它使您能够添加到App.config之类的内容: &LT; add key =&#34; JsonConfig&#34; value =&#34; {&#39; Id&#39;:&#39; 42&#39;,&#39; Name&#39;:&#39; foo&#39; }&#34; /&GT;
使用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<User> users { get; set; }
}
public class User
{
public string name { get; set; }
}
}
答案 3 :(得分:0)
您可以更改自己的UsersConfig类,它将能够序列化和反序列化为JSON。然后编写另一个将从您的文件中检索配置的类。在app.config中,您可以添加单个设置,指向您存储json配置的位置。
您可以使用Json.Net并向UsersConfig类添加属性来轻松实现此目的。
答案 4 :(得分:0)
//将字符串xml中包含的XML节点转换为JSON字符串
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);
//将字符串json中包含的JSON文本转换为XML节点
XmlDocument doc = JsonConvert.DeserializeXmlNode(json);