2017-06-20 5 views
0

オブジェクトデータをXMLファイルに保存するために、プロジェクトにXMLシリアル化を追加しました。私は、オブジェクトデータをシリアル化するために、以下のようにコードを使用し、オブジェクトを変更/削除/作成どこにでもいることを、私の方法インサイドXMLファイルには空白要素のみが含まれていますObjectProxy - C#XMLシリアル化

public static class SerializerHelper 
    { 
     /// <summary> 
     /// Serializes an object. 
     /// </summary> 
     /// <typeparam name="T"></typeparam> 
     /// <param name="serializableObject"></param> 
     /// <param name="fileName"></param> 

     private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(
      "SerializerHelper.cs"); 

     public static void SerializeObject<T>(string filepath, T serializableObject) 
     { 
      if (serializableObject == null) { return; } 

      try 
      { 
       XmlDocument xmlDocument = new XmlDocument(); 
       XmlSerializer serializer = new XmlSerializer(serializableObject.GetType()); 
       using (MemoryStream stream = new MemoryStream()) 
       { 
        serializer.Serialize(stream, serializableObject); 
        stream.Position = 0; 
        xmlDocument.Load(stream); 
        xmlDocument.Save(filepath); 
        stream.Close(); 
       } 
      } 
      catch (Exception ex) 
      { 
       //Log exception here 
       logger.Error("Error Serializing: " + ex.Message); 
      } 
     } 


     /// <summary> 
     /// Deserializes an xml file into an object list 
     /// </summary> 
     /// <typeparam name="T"></typeparam> 
     /// <param name="fileName"></param> 
     /// <returns></returns> 
     public static T DeSerializeObject<T>(string filepath) 
     { 
      T objectOut = default(T); 

      if (!System.IO.File.Exists(filepath)) return objectOut; 

      try 
      { 
       string attributeXml = string.Empty; 

       XmlDocument xmlDocument = new XmlDocument(); 
       xmlDocument.Load(filepath); 
       string xmlString = xmlDocument.OuterXml; 

       using (StringReader read = new StringReader(xmlString)) 
       { 
        Type outType = typeof(T); 

        XmlSerializer serializer = new XmlSerializer(outType); 
        using (XmlReader reader = new XmlTextReader(read)) 
        { 
         objectOut = (T)serializer.Deserialize(reader); 
         reader.Close(); 
        } 

        read.Close(); 
       } 
      } 
      catch (Exception ex) 
      { 
       //Log exception here 
       logger.Error("Error Deserializing: " + ex.Message); 
      } 

      return objectOut; 
     } 
    } 

私はこれを達成するために、次のヘルパークラスを使用していた

 //Increments the failed logon attempts counter 
     public void incrementFailedLogonAttempts() 
     { 
      logonAttemptCounter.incrementFailedLogons(); 

      //Update the failed logon attempt counter in the XML Data Store 
      SerializerHelper.SerializeObject(@"C:\Users\Michael" 
      + @"\Google Drive\FDM Dev Course Content\Workspace\SystemAdmin\SystemAdmin\" 
      + @"XML Data Store\LogonAttemptCounter.xml", logonAttemptCounter); 
     } 

しかし、すべての私のユニットテストを実行した後、(すべてのテストを実行する前に、シリアル化された罰金だった)私のXMLファイルの一部は、次のようになります

<?xml version="1.0"?> 
<ObjectProxy_4 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 

ここで間違っている可能性があることは誰か知っていますか?なぜそれが間違っているのでしょうか?

ご協力いただければ幸いです!

+0

私は実際に知っていると思います。私のテストでは、モックオブジェクトを使って依存関係を模擬しています。私のテストの多くでは、メソッドをテストするオブジェクトを作成し、モックオブジェクトをコンストラクタに注入しました。これが問題の原因ですか?私は疑似オブジェクトをシリアル化していますが、これは定義上空です。 –

答えて

0

私は実際に知っていると思います。私のテストでは、モックオブジェクトを使って依存関係を模擬しています。私のテストの多くでは、メソッドをテストするオブジェクトを作成し、モックオブジェクトをコンストラクタに注入しました。これが問題の原因ですか?私は疑似オブジェクトをシリアル化していますが、これは定義上空です。

関連する問題