有没有办法用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"
}
]
}
发布于 2015-05-13 15:20:35
这个库可能会对您有所帮助:https://github.com/Dynalon/JsonConfig:
从文档中:
JSON JsonConfig是一个简单易用的配置库,允许C#/.NET应用程序使用基于
的配置文件,而不是繁琐的web.config/application.config xml文件。它基于JsonFX和C# 4.0的动态特性。允许将程序配置文件放入.json文件中,其中默认配置可以作为资源嵌入或放入(web-)应用程序文件夹中。可以通过动态类型访问配置,不需要自定义类或任何其他存根代码。JsonConfig带来了对配置继承的支持,这意味着一组配置文件可用于在运行时具有单个范围的配置,该配置是所有提供的配置文件的合并版本。
发布于 2015-05-09 07:50:44
如果我理解正确的话,您实际上希望将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即可。然后,您可以通过编辑Gulp xml文件将.proj任务添加到构建步骤中(gulp应该全局安装在正在执行构建的机器上)。
gulp任务名
另一种方法是使用Newtonsoft等库从磁盘读取JSON文件。然后创建您自己的属性和系统,用于将值映射到类中的属性。这不是直接的,但肯定可以通过一些努力来完成。
发布于 2015-05-13 15:59:20
我推荐使用FX.configuration,你可以从NuGet添加它。您可以在以下位置找到:http://nugetmusthaves.com/Package/FX.Configuration
可以在以下位置找到一些代码示例:https://bitbucket.org/friendlyx/fx.configuration
它使您能够添加到名称内容,如:< add key="JsonConfig“value="{ 'Id':'42','Name':'foo‘}”/>
使用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; }
}
}
https://stackoverflow.com/questions/30042795
复制相似问题