XmlSerializer, Es war ein Fehler beim generieren der XML-Dokument
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();
Bekomme ich eine Fehlermeldung in der starrte Zeile wie:
Es wurde ein Fehler beim erzeugen des XML-Dokuments.
InnerException {"Memory stream ist nicht erweiterbar."}
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; }
}
...............
}
}
Was mache ich falsch?
Ist auch meine Methode zum konvertieren Stream in byte-array korrigieren? [Beantwortet]
Es ist wahrscheinlich etwas anderes in Ihrem PIP-Klasse. Bitte geben Sie uns die vollständige definition der Klasse
es sind nur andere Eigenschaften, sonst nichts...
es sind nur andere Eigenschaften, sonst nichts...
InformationsquelleAutor thewayman | 2011-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
MemoryStream
hat eineToArray()
Methode, die Sie verwenden können. Es gibt ein byte-array mit dem gesamten Inhalt des Streams. Nur stellen Sie sicher, dass Sie fertig sind schriftlich an den stream, bevor Sie den Inhalt zu Lesen. 🙂Als für die Fehler, es ist schwer zu beantworten ohne weitere Informationen. Haben Sie sichergestellt, dass alle Objekte, die Sie versuchen zu serialisieren gültig sind?
Edit:
Aus Ihren Kommentaren glaube ich zu wissen, was das problem ist. Definieren Sie die
MemoryStream
mit einer festen Größe von 1024 bytes. Wenn Sie serialisiert Objekt generierten xml-Code ist größer als das, und Sie am Ende mit einer Fehlermeldung, die sagt, Sie können erweitern Sie den Speicher streamen. Versuchen, um es zu schaffen, ohne eine explizite Größe (einfach) oder stellen Sie eine größere Größe.
Auch, wenn Sie nicht wollen, zu serialisieren, eine Eigenschaft, nur markieren Sie Sie mit der
XmlIgnore
Attribut.Inner Exception {"Memory stream ist nicht erweiterbar."}
InformationsquelleAutor Rune Grimstad
Des Updates umfassen die innere Ausnahme, wird klar: da man die Initialisierung des MemoryStream-mit einer fest-Größe byte-array, das die gesamte XML-Datei muss sich in Ihrem 1024 bytes. Es klingt wie Sie haben genügend Eigenschaften zu machen, dass ein problem.
Haben Sie wirklich bedeuten für Sie ein maximum von 1024 bytes, oder waren, haben Sie wollen in einer ersten Größe Kapazität für den stream. Das letztere wäre:
InformationsquelleAutor DocMax