Нужно ли сбрасывать при использовании класса XmlRootAttribute?
Я знаю, что при использовании потока мне нужно очистить его, чтобы он высвободил все ресурсы, связанные с потоком, и очистка потока берет любые буферизованные данные, которые еще не были записаны, и записывает их сразу.
У меня есть следующий класс:
[XmlRoot("EventList")]
public class EventList
{
private List<BaseEvent> events_ = new List<BaseEvent>();
/// Default constructor. Required for serialization
public EventList() {}
[XmlElement(ElementName = "Event")]
public List<BaseEvent> Events
{
get
{
return events_;
}
set
{
events_ = value;
}
}
}
теперь, прежде чем отправить его в ответ на HTTPRequest, нужно ли его сбросить? если да, то как я могу?
Я спрашиваю, потому что у меня есть проблема, которая описана здесь: Ответ AJAX - XmlHttp.responseXML обрезается
Метод, активируемый клиентом js:
[WebMethod]
public EventsRequestResult GetEvents(string agentId, int delayedReturnMS)
// EventsRequestResult - return value of the GetEvents method of the EventsService.
public class EventsRequestResult
{
private EventList events_ = null;
/// <summary>
/// List of the events
/// </summary>
[XmlElement(ElementName = "Events")]
public EventList Events
{
get
{
return events_;
}
set
{
events_ = value;
}
}
/// Default constructor.
public EventsRequestResult(){}
/// <summary>
/// Constructor used in case of the failure.
/// </summary>
/// <param name="errorCode">Numeric error code</param>
/// <param name="errorDescription">Human readable error description</param>
public EventsRequestResult(RequestErrorCode errorCode, string errorDescription) : base(errorCode, errorDescription){}
/// <summary>
/// Constructor used in case of successful events request.
/// </summary>
/// <param name="events">List of the events</param>
public EventsRequestResult(EventList events) : base()
{
events_ = events;
}
}
1 ответ
Марк прав в своем комментарии выше, но я думаю, что вы ищете что-то вроде
using(var stream = theResponse.OutputStream)
{
var ser = new XmlSerializer(typeof(EventList));
return ser.Deserialize(stream) as EventList;
}
return
изнутри используемого блока закроет (и очистит) поток.