2011-11-11 71 views
1
 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(); 

我得到一個錯誤在盯着路線爲:XmlSerializer的,有一個錯誤生成XML文檔時

時出錯生成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; } 
    } 
    ............... 
} 
} 

我到底做錯了什麼? 也是我的方法轉換流爲字節數組正確? [回答]

+0

這很可能是PIP類中的其他內容。請給我們完整的類定義 – Polity

+0

剛好有其他屬性沒有別的... – thewayman

回答

2

MemoryStreamToArray()方法,您可以使用。它返回一個包含整個流內容的字節數組。在閱讀內容之前,請確保您已完成寫入流。 :-)

至於錯誤,這是很難沒有更多的信息回答。你是否證實你嘗試序列化的所有對象都是有效的?

編輯:

從你的意見,我想我知道是什麼問題。您定義了MemoryStream,其固定大小爲1024字節。當你序列化你的對象的時候,生成的xml比這個更大,並且最終會出現一個錯誤,說你不能擴展內存流。嘗試不設置明確的大小來創建它(只使用

新的MemoryStream()

),或設置一個更大的尺寸。

另外,如果你不想序列化的屬性,只是用XmlIgnore屬性標記它。

+0

有一個內部對象CurrencyPair我需要序列化了。我也不想保存那個我可以忽略的對象。 – thewayman

+0

內部異常{「內存流不可擴展。」} – thewayman

2

隨着您的更新,包括內部異常,很明顯:因爲你是初始化一個固定大小的字節數組將MemoryStream,整個XML必須符合你的1024個字節。聽起來你有足夠的屬性來解決問題。

難道你真的是一個最大的1024個字節,或者是做你打算設置流的初始容量大小。後者將是:

MemoryStream stream = new MemoryStream(1024);