まず、データソースは公開されているため、wwwroot
フォルダには置かないでください。 official docsを見てみましょう:
のアプリのWebルートは、CSS、JS、画像ファイルなどの公共、 静的リソースのために、プロジェクトのディレクトリです。静的ファイル ミドルウェアは、デフォルトでWebルートディレクトリ(および サブディレクトリ)のファイルのみを処理します。
したがって、Countries
フォルダをプロジェクトのルートフォルダに移動します。
xmlデータを読むには、XmlSerializer
を使用できます。私は、xmlファイルを読み取る方法を示すためにしようとします:
まず私はあなたが以下のようなXMLコンテンツを持っていると仮定します。
<?xml version="1.0" encoding="UTF-8" ?>
<Container>
<Countries>
<Country>
<Code>Code1</Code>
<Title>Title1</Title>
</Country>
<Country>
<Code>Code2</Code>
<Title>Title2</Title>
</Country>
</Countries>
</Container>
まずタイプにその後
public class Country
{
public string Code { get; set; }
public string Title { get; set; }
}
public class Container
{
public Country[] Countries { get; set; }
}
を記述するXML直列化復元のためのサービスを作成します:
public interface ICountryService
{
Country[] GetCountries();
}
public class CountryService : ICountryService
{
private readonly IHostingEnvironment _env;
public CountryService(IHostingEnvironment env)
{
_env = env;
}
public Country[] GetCountries()
{
XmlSerializer ser = new XmlSerializer(typeof(Container));
FileStream myFileStream = new FileStream(_env.ContentRootPath + "\\Countries\\en-GB.xml", FileMode.Open);
return ((Container)ser.Deserialize(myFileStream)).Countries;
}
}
ConfigureServices
の方法で登録サービス:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddSingleton<ICountryService, CountryService>();
}
最後に注入し
public class SomeController : Controller
{
public SomeController(ICountryService countryService)
{
// use it
}
}
本当に素晴らしいと詳細な回答(例えばコントローラのように)どこにでもそれを使用します。あなたのソリューションは完璧に機能します。なぜ私がエラーを起こしているのかを理解するためにはいくつかの試みが必要でしたが、それは私のXMLデータ構造のためでしたが、今は明らかです。私は包括的な答えを提供するあなたの時間を非常に感謝します。 – RobHurd
以前のバージョンのasp.netの属性を使用していない場合は、これは良い答えです。属性を使用してデータメンバーに属性をマップしました。これをコアでどのように達成するのですか? – phitch