2016-07-22 9 views
1

シリアライズされた構造を既存のXMLファイルに追加しようとしています。下のコードでは、シリアライズされた構造をXMLファイルに追加する

  • ファイルが存在するかどうかをテストします。
  • 作成しない場合は作成してください。
  • 存在する場合は、.Add構文を使用してファイルにシリアル化された構造(メモリストリームから)を追加します。 xmlDoc.Add(xmlSerialized);実行は、それが以下のエラー

を取得すると

  • は「非空白文字は、コンテンツに追加することはできません。」

  • 私は間違っていますか?

    try 
    { 
        xmlDoc = XDocument.Load(path); 
        XmlSerializer xmlSerialized = new XmlSerializer(typeof(DataClass.Task)); 
        MemoryStream memStream = new MemoryStream(); 
        xmlSerialized.Serialize(memStream, taskStruct); 
        xmlDoc.Add(xmlSerialized); 
    
        bSuccess = true; 
    } 
    

    答えて

    1

    編集のMemoryStreamがValid Content of XElement and XDocument Objects

    あたりに渡すために有効なタイプではありませんので、問題を解決するために、私はあなたが遭遇している問題は、あなたがインスタンスを追加しようとしているということだと思います「MemoryStreammemStream」に含まれるシリアル化されたオブジェクトではなく、XmlSerializerからXDocumentに変更されます。

    MemoryStreamを渡すことができないタイプのように見えるので、このようなXElementCreateWriter()方法、試してみてください。この回答に基づいてコードの上

    try 
    { 
        xmlDoc = XDocument.Load(path); 
        XDocument newXml = new XDocument(); 
    
        using (var writer = newXml.CreateWriter()) 
        { 
         // write xml into the writer 
         DataContractSerializer xmlSerialized = new DataContractSerializer(typeof(DataClass.Task)); 
         xmlSerialized.WriteObject(writer, taskStruct); 
        } 
    
        xmlDoc.Add(writer); 
    
        bSuccess = true; 
    } 
    

    は:memStreamを追加How do I serialize an object into an XDocument?

    +0

    がエラー以外を返します空白。私はxmlDoc.Root.Add(memStream)を試して、これを得ました: System.IO.MemoryStream IrvineCAGuy

    +0

    @IrvineCAGuy - 投稿した新しい例を試しましたか?これはMemoryStreamを使用しませんが、XElementのCreateWriterメソッドを使用してシリアル化されたオブジェクトをXElementに書き込みます。これをxisting XMLドキュメントに追加する必要があります。 – Tim

    +0

    XElementを宣言するnewXml = new XElement()ステートメントは、System.Linq.XElementでは無効です。それは2つの議論が必要です。しかし、あなたのソリューションは近づいているように見えます。 – IrvineCAGuy

    関連する問題