Mic*_*dak 5 xml .net-core asp.net-core
我正在编写的 ASP.NET Core (2.1) 应用程序使用两个配置源:JSON 和 XML(使用框架的标准AddJsonFile和AddXmlFile.XML 设置具有更高的优先级(例如,应该覆盖 JSON 文件中的匹配设置)。
到目前为止,一切工作正常,直到我必须在 XML 文件中创建一个数组。有可能吗?
ASP.NET Core 中的参考配置:将数组绑定到类
\n\n\n\n\n支持
\nBind使用配置键中的数组索引将数组绑定到对象。任何公开数字键段(:0、:1、 \xe2\x80\xa6:{n})的数组格式都能够将数组绑定到 POCO 类数组。
我将提供两个示例来说明如何在 XML 配置文件中使用数组
\n\n使用以下内容config.xml
<configuration>\n <tvshow>\n <metadata>\n <series>Dr. Who</series>\n <title>The Sun Makers</title>\n <airdate>11/26/1977</airdate>\n <episodes>4</episodes>\n </metadata>\n <actors name="0">Tom Baker</actors>\n <actors name="1">Louise Jameson</actors>\n <actors name="2">John Leeson</actors>\n <legal>(c)1977 BBC https://www.bbc.co.uk/programmes/b006q2x0</legal>\n </tvshow>\n</configuration>\nRun Code Online (Sandbox Code Playgroud)\n\n匹配的 POCO 看起来像
\n\n<configuration>\n <tvshow>\n <metadata>\n <series>Dr. Who</series>\n <title>The Sun Makers</title>\n <airdate>11/26/1977</airdate>\n <episodes>4</episodes>\n </metadata>\n <actors name="0">Tom Baker</actors>\n <actors name="1">Louise Jameson</actors>\n <actors name="2">John Leeson</actors>\n <legal>(c)1977 BBC https://www.bbc.co.uk/programmes/b006q2x0</legal>\n </tvshow>\n</configuration>\nRun Code Online (Sandbox Code Playgroud)\n\n给定<actors>元素的名称,生成的路径将是
tvshow:actors:0\ntvshow:actors:1\ntvshow:actors:2\nRun Code Online (Sandbox Code Playgroud)\n\n遵循文件中所述的约定
\n\n所以在接下来的单元测试中它会按预期通过。
\n\npublic class TvShow {\n public Metadata Metadata { get; set; }\n public string[] Actors { get; set; } //<-- TAKE NOTE\n public string Legal { get; set; }\n}\n\npublic class Metadata {\n public string Series { get; set; }\n public string Title { get; set; }\n public DateTime AirDate { get; set; }\n public int Episodes { get; set; }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在另一个例子中,假设config.xml修改为以下内容
<?xml version="1.0" encoding="utf-8" ?> \n<configuration>\n <tvshow>\n <metadata>\n <series>Dr. Who</series>\n <title>The Sun Makers</title>\n <airdate>11/26/1977</airdate>\n <episodes>4</episodes>\n </metadata>\n <actors>\n <names name="0">Tom Baker</names>\n <names name="1">Louise Jameson</names>\n <names name="2">John Leeson</names>\n </actors>\n <legal>(c)1977 BBC https://www.bbc.co.uk/programmes/b006q2x0</legal>\n </tvshow>\n</configuration>\nRun Code Online (Sandbox Code Playgroud)\n\n将受影响的 POCO 重构为
\n\ntvshow:actors:0\ntvshow:actors:1\ntvshow:actors:2\nRun Code Online (Sandbox Code Playgroud)\n\n同样,按照约定,数组元素的路径需要类似于
\n\ntvshow:actors:names:0\ntvshow:actors:names:1\ntvshow:actors:names:2\nRun Code Online (Sandbox Code Playgroud)\n\n测试时也表现出预期的效果
\n\n[TestClass]\npublic class Configuration_Should {\n [TestMethod]\n public void Bind_Xml_Arrays() {\n var config = new ConfigurationBuilder()\n .SetBasePath(Directory.GetCurrentDirectory())\n .AddXmlFile("config.xml", optional: true, reloadOnChange: true)\n .Build();\n\n var tvShow = config.GetSection("tvshow").Get<TvShow>();\n\n tvShow.Should().NotBeNull();\n\n tvShow.Actors.Should().HaveCount(3);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n该文档以及文档应该为您正确构建 XML 配置以绑定到数组提供足够的基础。
\n| 归档时间: |
|
| 查看次数: |
2980 次 |
| 最近记录: |