Как я могу сериализовать сущности с сайта ASP.NET MVC в XML? - PullRequest
2 голосов
/ 10 августа 2010

Я работаю над сайтом ASP.NET MVC (в c #), который подключается к базе данных и использует преимущества структуры лица. Мне бы хотелось, чтобы люди могли изменять информацию в базе данных с сайта (поскольку мне кажется, что намного проще отображать и проверять данные через сайт ASP.NET MVC, чем приложение для настольных ПК, и при этом гораздо проще распространять их). инструменты, чтобы сделать). Затем я хочу, чтобы пользователи могли экспортировать базу данных (после внесенных изменений) в файл XML, который может быть загружен созданным мною настольным приложением. Мне интересно, есть ли простой способ, чтобы классы, созданные структурой сущностей, которые представляют данные в базе данных, сериализовали свою информацию в файл XML? Затем я предполагаю, что смогу повторно использовать тот же сгенерированный код в своем настольном приложении для чтения этих файлов XML и создания объектов, представляющих данные для использования в этой программе?

Было бы проще как-то просто экспортировать базу данных, а затем использовать тот же код, сгенерированный для чтения из локальной базы данных на клиентском компьютере, вместо файла XML (клиентские компьютеры могут не иметь доступа к Интернету, поэтому данные должен храниться локально)?

Не могли бы вы пойти по-другому? Заранее спасибо за ваш вклад !!!

Ответы [ 2 ]

3 голосов
/ 10 августа 2010

Xml-сериализатор - это все, что вам нужно. Я использую этот класс XmlResult, который я нашел и немного подправил для своих XML-ответов:

public class XmlResult : ActionResult
{
    private object objectToSerialize;

    /// <summary>
    /// Initializes a new instance of the <see cref="XmlResult"/> class.
    /// </summary>
    /// <param name="objectToSerialize">The object to serialize to XML.</param>
    public XmlResult(object objectToSerialize)
    {
        this.objectToSerialize = objectToSerialize;
    }

    /// <summary>
    /// Gets the object to be serialized to XML.
    /// </summary>
    public object ObjectToSerialize
    {
        get { return this.objectToSerialize; }
    }

    /// <summary>
    /// Serialises the object that was passed into the constructor to XML and writes the corresponding XML to the result stream.
    /// </summary>
    /// <param name="context">The controller context for the current request.</param>
    public override void ExecuteResult(ControllerContext context)
    {
        if (this.objectToSerialize != null)
        {
            context.HttpContext.Response.Clear();
            XmlRootAttribute root = new XmlRootAttribute("response");

            var xs = new System.Xml.Serialization.XmlSerializer(this.objectToSerialize.GetType(), root);
            context.HttpContext.Response.ContentType = "text/xml";

            xs.Serialize(context.HttpContext.Response.Output, this.objectToSerialize);
        }
    }

Затем, когда вы захотите вернуть XML из вашего действия, вы можете просто сделать:

public ActionResult GetStuffAsXml(int id)
{
    var dbStuff = db.GetStuff(id);
    // fetch stuff in database
    return new XmlResult(dbStuff);
}

Надеюсь, это поможет!

1 голос
/ 10 августа 2010

Попробуйте эти две ссылки, чтобы начать xml сериализатор WCF документация

Даже если вам нужно добавить атрибуты WCF, когда вы не используете WCF, это может упростить обработку данных. На мой взгляд, обычно лучше передать это в доверенную библиотеку, где это возможно, чтобы не увязнуть в деталях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...