La construction d'une Section de Configuration JSON
Est-il un moyen d'avoir des sections de configuration écrit en JSON au lieu de XML?
Supposons que j'ai le texte suivant 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; }
}
}
Je peux ensuite créer le fichier XML suivant la configuration de la section:
<users-config>
<users>
<user name="Matt458" />
<user name="JohnLennon" />
</users>
</users-config>
Ce que je veux atteindre est de mantain la même UsersConfig classe, mais au lieu de mappage XML, je voudrais correspondre à un JSON:
{
"users": [
{
"name": "Matt458"
},
{
"name": "JohnLennon"
}
]
}
- Son possible à l'aide de la
SerializeSection
etDeserializeSection
les remplacements dans leConfigurationSection
classe. Vous pouvez utiliser une CDATA élément à l'intérieur d'Utilisateurs élément de tenir des données arbitraires, et ensuite le lire au cours de la coutume de sérialisation/désérialisation. - Avez-vous essayé le suivant bibliothèque? Il dispose d'
Storage to .config files, plain XML or JSON files, strings or a database
il pourrait donc la peine de prendre un coup d'oeil. - Entendez-vous web.config?
- Personnellement, je pense que c'est en allant sur le mauvais chemin de la réalisation de votre objectif final. L'intention du web.fichier de configuration est une approche normalisée pour la définition de la configuration des informations traitées par ASP.NET, IIS et le .NET Framework. Si vous avez besoin de pousser les données stockées dans la .fichier de config ailleurs dans un format différent, alors vous devriez être la sérialisation des données en tant que de besoin, et de ne pas essayer de faire quelque chose d'incompatible avec dire l'Administration IIS console MMC ou d'autres applications.
- Pourquoi est-ce nécessaire XML et .NET de construire dans la configuration des classes fait le travail parfaitement
Vous devez vous connecter pour publier un commentaire.
cette bibliothèque peut vous aider à: https://github.com/Dynalon/JsonConfig :
à partir de la documentation:
Si je comprends bien, vous voulez définir le web.sections de configuration JSON plutôt que XML.
Actuellement, il n'est rien hors de la zone qui ne de ce que je suis au courant. Cependant, une solution possible est d'utiliser Gulp dynamique d'écrire votre site web.fichier de config dans le cadre de votre étape de génération. Je n'ai pas d'exemple concret que je ne suis pas au courant de toute personne faisant cela, mais cela pourrait vous donner un pointeur.
D'abord un coup d'oeil à cet article qui explique comment vous pouvez utiliser la xmlpoke module pour écrire du XML:
http://www.mikeobrien.net/blog/using-gulp-to-build-and-deploy-dotnet-apps-on-windows/
Lecture de JSON dans le Gulp serait un morceau de gâteau, alors vous avez juste besoin de la carte au format JSON en XML. Vous pouvez ensuite ajouter de la Gulp tâche à votre étape de génération en éditant votre .proj fichier xml (gulp doit être installé à l'échelle mondiale sur la machine de la génération est effectuée sur).
Ouvrir votre proj fichier dans un éditeur de texte et localisez la présente section:
Remplacer le commentaire avec une gorgée de commande
Une alternative est d'utiliser une bibliothèque comme Newtonsoft pour lire un fichier JSON à partir du disque. Ensuite créer vos propres attributs et d'un système de mappage des valeurs pour les propriétés de votre classe. Ce n'est pas simple, mais pourrait certainement être fait avec un peu d'effort.
Je le recommande d'utiliser FX.de configuration, vous pouvez l'ajouter à partir de NuGet.
vous pouvez le trouver à: http://nugetmusthaves.com/Package/FX.Configuration
des exemples de code peut être trouvé à: https://bitbucket.org/friendlyx/fx.configuration
il vous permet d'ajouter à l'Application.config des trucs comme:
< add key="JsonConfig" value="{ 'Id': '42', 'Nom': 'foo' }" />
une autre option lors de l'utilisation de la FX.la configuration consiste à ajouter une nouvelle config.fichier json avec l'ensemble de votre configuration et à la création de l'instance, il va lire et de l'analyser.
le code suivant est exactement ce dont vous avez besoin avec le nouveau fichier de configuration json.
Vous pouvez changer votre propre UsersConfig classe qu'elle sera en mesure de sérialiser et désérialiser en JSON. Puis écrire une autre classe qui va récupérer la configuration de votre fichier. En application.config vous pouvez ajouter un paramètre unique qui vous permettra de l'endroit où vous stockez vos json config.
Vous pouvez le faire facilement en utilisant Json.Net et l'ajout d'attributs à votre UsersConfig classe.
C# Configuration Sections
avec les classes et les attributs de validation. Je veux avoir un seulConfigurationSection
classe à être représentés en XML ou JSON//Pour convertir un nœud XML contenues dans la chaîne de format xml dans une chaîne JSON
//Pour convertir en JSON texte contenu dans la chaîne json dans un nœud XML
Documentation ici: La conversion entre JSON et XML avec Json.NET