在Web.Config的AppSettings中使用Json

3
我将尝试翻译一些表述为json的映射配置:
[{"Name":"xyz","Ids":["456f782d468","c65b4703"]},{"Name":"abc","Ids":["a95fg567","456sdf564"]}]

是否可以将json存储在appsettings中?
我知道可以在web.config中创建自定义节。
但是,这个应用程序可能部署到Azure Web Apps,其中appsettings是我看到此配置可以进行的唯一方式。


不,我认为你应该将字符串存储为appsetting项值。为什么不存储一个自定义的settings.json文件并从中读取呢? - Shyju
我一年前问过一个类似的问题:构建JSON配置部分。我希望它有所帮助。 - Matias Cicero
5个回答

2

不太好。web.config 是 XML,XML 中不允许使用引号,必须将其转义为“。在 JSON 上这样做仍然会使其“难以”阅读/维护。Base64 是 serhiyb 的一种解决方案,但这也不会被人维护。

我会将它们存储为 appsettings 键/值对,然后在运行时生成 JSON 字符串。

如果您确定该字符串永远不会更改,则转义或 Base64 是一个选项。


Mariusz下面的答案更好、更干净。我认为它应该被标记为已接受的回答。 - Nikolay Nahimov

0

考虑到您的限制,我建议将其编码为Base64字符串,并在从web.config读取时解码。


0

我使用单引号将序列化的模型存储在配置文件中,然后在从配置文件中读取后简单地对其进行反序列化。

        var serialized = JsonConvert.SerializeObject(yourObject);
        var configFriendlyString = serialized.Replace("\"", "'"); // store it in config file
        var deserialized = JsonConvert.DeserializeObject<YourObjectModel>(configFriendlyString);

序列化对象在配置中的示例:

<add key="Categories" value="[{'ID':1,'Name':'All'},{'ID':2,'Name':'Review'}]" />

这样做可以使其易于阅读和编辑。注意,JsonConvert可以反序列化它,而无需将单引号替换为双引号。


0

如果您使用&quot;而不是引号字符,则可以在Web.config中存储JSON应用程序设置或连接字符串而不会出现问题。例如:

<add key="ThisIsJson" value="[{&quot;Name&quot;:&quot;xyz&quot;}]"/>

这也不需要任何特殊的处理,至少在 Json.NET 中是这样。


-1
在我的 web.config 文件中,括号用于使用变量,例如 {0} 或 {1}。 因此,我需要使用双括号进行转义,就像这样:
<add key="ThisIsJson" value="{{&quot;Name&quot;:&quot;xyz&quot;}}"/>

希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接