【问题标题】:Do I need to Flush when using XmlRootAttribute Class?使用 XmlRootAttribute 类时是否需要刷新?
【发布时间】:2013-03-20 09:15:58
【问题描述】:

我知道,当使用流时,我需要刷新它,以便它会释放与流相关的所有资源,并且刷新流会获取尚未写入的任何缓冲数据,并立即将其写出。

p>

我有以下课程:

[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 response - XmlHttp.responseXML is cut off

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;
    }
}

【问题讨论】:

  • 您如何将其作为回复发送?如果我正确阅读文档,(new XmlSerializer(typeof(EventList))).Serialize(theResponse.OutputStream, eventList); 应该可以解决问题...
  • XmlRoot 与刷新流的问题是正交的;您没有显示任何与此相关的代码。但是,关闭流也会导致它被刷新。
  • @AKX 我正在发送响应 throw 常规返回语句,就像返回常规字符串一样
  • @MarcGravell 我不明白你的评论,我该如何关闭流?这是普通班
  • @DorCohen 问题中的代码与关闭、刷新等相关的任何内容都无关。您可能在某处有一些与 相关的代码到流。

标签: c# serialization xml-serialization flush xmlroot


【解决方案1】:

Marc 在上面的评论中是对的,但我认为您正在寻找的是类似于

    using(var stream = theResponse.OutputStream)
    {
        var ser = new XmlSerializer(typeof(EventList));
        return ser.Deserialize(stream) as EventList;
    }

return 在 using 块中将关闭(并刷新)流。

【讨论】:

    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2021-10-01
    • 2019-12-29
    • 2015-11-10
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多