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"/>
ここで間違っている可能性があることは誰か知っていますか?なぜそれが間違っているのでしょうか?
ご協力いただければ幸いです!
私は実際に知っていると思います。私のテストでは、モックオブジェクトを使って依存関係を模擬しています。私のテストの多くでは、メソッドをテストするオブジェクトを作成し、モックオブジェクトをコンストラクタに注入しました。これが問題の原因ですか?私は疑似オブジェクトをシリアル化していますが、これは定義上空です。 –