1

MemoryStream次のようにファイルに書き込む XML を含む があります 。

var xml = XElement.Load(data.Content); // data.Content is of type `Stream`
var contentElement = new XElement("Content", xml);
var information = new XElement("TestInformation",
                      new XAttribute("Name", data.Descriptor.Name),
                      new XAttribute("Description", data.Descriptor.Description),
                      new XAttribute("Owner", data.Descriptor.Owner),
                      contentElement);

(dataは内部型です -- (コンテンツと呼ばれる) とメタデータを含む記述子をDataObject含みます)。Stream

後で、次のようにこのファイルから読み取ろうとします。

var returnValue = new DataObject();
var xElement = XElement.Load(fullPath);//the file path
returnValue.Descriptor = new Descriptor
                        {
                            Name = xElement.Attribute("Name").Value,
                            Description = xElement.Attribute("Description").Value,
                            Owner = xElement.Attribute("Owner").Value
                        };
returnValue.Content = GetContent(xElement.Element("Content"));

GetContent メソッド:

private Stream GetContent(XElement element)
{
    var testElement = element.Elements().First();
    var contentStream = new MemoryStream();
    var streamWriter = new StreamWriter(contentStream);
    streamWriter.Write(testElement);
    contentStream.Position = 0;
    return contentStream;
}

ストリームを必要な内部型として読み取ろうとするSerializationExceptionと、一部の要素が閉じられていないというメッセージが表示されますが、実際にはそうではありません - a を使用しStreamReaderてこのストリームを読み取ると、すべてのデータが含まれていません。で見たものXElementです。ここで何が間違っていますか?

4

2 に答える 2

0

の使い方が抜けていましたStreamWriter.Flush()。このメソッドにより、ライターのバッファーがストリームに書き込まれます。

于 2012-12-31T06:20:37.300 に答える
-1

[Serializable] このようにクラスの上に書く

[Serializable]
public class myClass{
//TODO: Your code here 

}

試してみて、私にフィードバックしてください

于 2012-12-30T13:58:52.390 に答える