/ /不明な型のオブジェクトをXMLでシリアル化を解除する方法 - .net、xmlのシリアル化

不明な型のオブジェクトをXMLに逆シリアル化する方法 - .net、xml-serialization

自分のオブジェクトを(キャッシュのように)ハードディスクに保存したい 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);
}
}
}