Как говорится в этой теме, я хочу сериализовать объект, а также показывать его в веб-браузере. При попытке сделать это я получаю сообщение об ошибке "IOException не был обработан кодом пользователя". Процесс не может получить доступ к>... локальной карте.
Так что я заметил, что во время сериализации его вряд ли можно написать один и тот же файл одновременно. Однако. Как-то возможно сначала, сериализуйте его. Затем откройте его? Или есть лучшее решение?
public ActionResult Serializing(Models.SerializerModel model)
{
var username = model.Username.ToString();
if (ModelState.IsValid)
{
string path = Server.MapPath("~/xml");
XmlSerializer serial = new XmlSerializer(model.GetType());
System.IO.StreamWriter writer = new System.IO.StreamWriter(path + "\\"+ username + ".xml");
serial.Serialize(writer, model);
//This code below i want to execute after the above one is done
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/xml";
//During WriteFile i get the error IO
Response.WriteFile(Server.MapPath("~/xml\\hello.xml"));
Response.Flush();
Response.End();
return RedirectToAction("Index", "Profile");
}
return RedirectToAction("Index", "Profile");
}
Код работает, если я разделяю коды ответов и код сериализации на две разные кнопки, но этого я не хочу достичь.
Вы получаете IOException
потому что ваш поток записи все еще открыт, когда вы начинаете читать его, чтобы нажать его в ответ. Я сделал пару изменений в вашем коде. Это должно решить вашу проблему. Также я не уверен, действительно ли вам нужен вызов Response.End()
public ActionResult Serializing(Models.SerializerModel model)
{
var username = model.Username.ToString();
if (ModelState.IsValid)
{
string path = Server.MapPath("~/xml");
//First write to file. using statement will take care of closing writer stream.
XmlSerializer serial = new XmlSerializer(model.GetType());
using (var writer = new System.IO.StreamWriter(path + "\\" + username + ".xml"))
{
serial.Serialize(writer, model);
writer.Flush();
}
//This code below i want to execute after the above one is done
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/xml";
//During WriteFile i get the error IO
Response.WriteFile(Server.MapPath("~/xml/hello.xml"));
Response.Flush();
//Response.End(); I am not sure if this statement is really needed here.
return RedirectToAction("Index", "Profile");
}
return RedirectToAction("Index", "Profile");
}