自分のオブジェクトを(キャッシュのように)ハードディスクに保存したい XmlSerializer
。この場合、私は何の問題もありません。
しかし、このXMLをオブジェクトに逆シリアル化したいときは、エラーが発生します。方法はありますか ように未知のオブジェクトまたは私が作成したオブジェクトにXMLを逆シリアル化するのですか?
回答:
回答№1は1.Netには未知のオブジェクトに逆シリアル化する方法はありません。
XMLオブジェクトを正常にシリアライズ/デシリアライズするには、クラスにデフォルトのコンストラクタが必要です。最善の方法は、正確なエラーメッセージを表示することです。できますか?
回答№2の場合は0
最初にクラスのTypeを直列化しないでください(System.TypeクラスはSerializableです)。
その後、どのタイプがシリアル化されたかを確認し、適切なインスタンスを作成できます。
回答№3の場合は-1
(DOMまたはSAXよりも)もう1つの、より効率的なデータバインディングアプローチがこれにあります。 記事:
回答№4の場合-2
私の投稿で説明されているように、SerializationHelper.DeSerializeNowを使用することができます。 http://borismod.blogspot.com/2008/07/nunit-serialization-test.html
internal class SerializationHelper
{
private static readonly string DefaultFilePath = "test.dat";
internal static void SerializeNow(object c)
{
SerializeNow(c, DefaultFilePath);
}
internal static void SerializeNow(object c, string filepath)
{
FileInfo f = new FileInfo(filepath);
using (Stream s = f.Open(FileMode.Create))
{
BinaryFormatter b = new BinaryFormatter();
b.Serialize(s, c);
}
}
internal static object DeSerializeNow()
{
return DeSerializeNow(DefaultFilePath);
}
internal static object DeSerializeNow(string filepath)
{
FileInfo f = new FileInfo(filepath);
using (Stream s = f.Open(FileMode.Open))
{
BinaryFormatter b = new BinaryFormatter();
return b.Deserialize(s);
}
}
}