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();
我在stared行中出错:
生成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转换为字节数组是否正确? [回答]
答案 0 :(得分:2)
MemoryStream
有一个ToArray()
方法可以使用。它返回一个包含流的全部内容的字节数组。在阅读内容之前,请确保您已完成写入流。 : - )
至于错误,没有更多信息就很难回答。您是否验证过您尝试序列化的所有对象都有效?
修改强>
从你的评论中我想我知道问题是什么。您可以使用1024字节的固定大小定义MemoryStream
。序列化对象时,生成的xml大于该对象,最终会出现错误,指出无法扩展内存流。尝试创建它而不设置明确的大小(只需使用
new MemoryStream()
),或设置更大的尺寸。
另外,如果您不想序列化某个属性,只需使用XmlIgnore
属性对其进行标记。
答案 1 :(得分:2)
随着您的更新包含内部异常,它变得清晰:因为您使用固定大小的字节数组初始化MemoryStream,所以整个XML必须适合您的1024字节。听起来你有足够的属性来解决这个问题。
您真正意味着最多1024个字节,或者您是否打算为流设置初始大小容量。后者将是:
MemoryStream stream = new MemoryStream(1024);