【问题标题】:XmlSerializer, There was an error generating the XML documentXmlSerializer,生成 XML 文档时出错
【发布时间】:2011-11-11 06:35:11
【问题描述】:
        XmlSerializer formatter = new XmlSerializer(typeof(List<Objects.PIP>));

        **MemoryStream stream = new MemoryStream(new byte[1024]);**

        formatter.Serialize(stream, Repository.GlobalRepository.PIPInformation);

        byte[] bt = stream.ToArray();
        foreach (Communication.Client Client in server.ClientList)
        {
            Client.SendMessage(bt);
            
        }
        stream.Flush();

我在注视的行中收到错误:

生成 XML 文档时出错。

InnerException {“内存流不可扩展。”}

PIP Class

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ObjectLibrary.Model;
using System.Xml.Serialization;

namespace PIPServer.Objects
{

[XmlRoot(Namespace = "urn:my-namespace")]
public class PIP
{
    private long pipID;

    public long PipID
    {
        get { return pipID; }
        set { pipID = value; }
    }

    private CurrencyPair currencyPair;

    public CurrencyPair CurrencyPair
    {
        get { return currencyPair; }
        set { currencyPair = value; }
    }
    ...............
 }
}

我做错了什么? 我将 Stream 转换为字节数组的方法是否正确? [已回答]

【问题讨论】:

  • 这很可能是您的 PIP 课程中的其他内容。请给我们完整的类定义
  • 只有其他属性没有别的......

标签: c# winforms stream xml-serialization


【解决方案1】:

MemoryStream 有一个您可以使用的ToArray() 方法。它返回一个字节数组,其中包含流的全部内容。只需确保在读取内容之前完成对流的写入。 :-)

至于错误,没有更多信息很难回答。您是否验证了您尝试序列化的所有对象都是有效的?

编辑:

从您的 cmets 我想我知道问题出在哪里。您将 MemoryStream 定义为 1024 字节的固定大小。当你序列化你的对象时,生成的 xml 比那个大,你最终会得到一个错误,说你不能扩展内存流。尝试在不设置显式大小的情况下创建它(只需使用

新的 MemoryStream()

),或设置更大的尺寸。

另外,如果您不想序列化某个属性,只需使用XmlIgnore 属性对其进行标记。

【讨论】:

  • 有一个内部对象 CurrencyPair 我也需要序列化。而且我不想保存那个我可以忽略的对象。
  • 内部异常{“内存流不可扩展。”}
【解决方案2】:

随着您的更新包含内部异常,很明显:由于您正在使用固定大小的字节数组初始化 MemoryStream,因此整个 XML 必须适合您的 1024 字节。听起来你有足够的属性来解决这个问题。

您真的是指最大 1024 字节,还是打算为流设置初始大小容量。后者是:

MemoryStream stream = new MemoryStream(1024);

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多