В идеале, файл базы данных - вы можете использовать простую базу данных sqlite, если хотите.
В противном случае файл JSON отлично подойдет для этого. Вы также можете по-прежнему использовать XML, если используете System.Linq.Xml
(который имеет гораздо более приятный и современный API по сравнению с System.Xml
) - просто замените мое использование JsonConvert
на некоторую библиотеку десериализации XML или собственный код чтения XML.
Создайте файл .json
с подробной информацией в:
{
"contacts": [
{
"name": "Luke Skywalker",
"email" : "luke@degobah.com",
},
{
"name": "Anakin SkyWalker",
"email" : "whiner@deathstar.com",
},
// etc
]
}
Создание типов C # POCO, которые моделируют данные в файле:
class ContactsFile {
public List<Contact> Contacts { get; set; }
}
class Contact {
public String Name { get; set; }
public String Email { get; set; }
public String Phone { get; set; }
}
Прочитайте это где-нибудь в своем приложении:
Я предполагаю, что данные будут редактироваться регулярно, поэтому вам следует перезагружать их каждый раз, когда вы их используете - в этом случае вам следует создать новый класс обслуживания для инъекций, например, так. Обратите внимание, что вам не нужен интерфейс (но он полезен для тестирования).
public interface IContactsStore
{
Task<ContactsFile> ReadAsync();
}
public class DefaultContactsStore : IContactsStore
{
private readonly IHostingEnvironment env;
public DefaultContactsStore(IHostingEnvironment env)
{
this.env = env;
}
public async Task<ContactsFile> ReadAsync()
{
String path = Path.Combine( this.env.ContentRootPath, "Contacts.json" );
String fileContents;
using( StreamReader rdr = new StreamReader( path ) )
{
fileContents = await rdr.ReadToEndAsync();
}
return JsonConvert.DeserializeObject<ContactsFile>( fileContents );
}
}
public class MyController : Controller
{
private readonly IContactsStore contactsStore;
public MyController( IContactsStore contactsStore )
{
this.contactsStore = contactsStore;
}
[Route("/contacts")]
public async Task<IActionResult> ListContacts()
{
ContactsFile cf = await this.contactsStore.ReadAsync();
return this.View( model: cf );
}
}
// In Startup.cs:
public void ConfigureService( ... )
{
// etc
services.AddSingleton<IContactsStore,DefaultContactsStore>();
// etc
}