:List <ICustomClass>をxmlにシリアル化しますか?私は、次のコードファイルを持っている
public interface IMod
{
string Name { get; set; }
string Description { get; set; }
bool Enabled { get; set; }
List<IClassFile> ClassFiles { get; set; }
}
public interface IClassFile
{
string Path { get; set; }
string FileName { get; set; }
bool Enabled { get; set; }
}
public class ClassFile : IClassFile
{
public string Path { get; set; }
public string FileName { get { return System.IO.Path.GetFileName(Path); } }
public bool Enabled { get; set; }
....
}
public class ZippedMod : IMod
{
public string Name { get; set; }
public string Description { get; set; }
public bool Enabled { get; set; }
public List<IClassFile> ClassFiles { get; set; }
....
}
public class ConfigurationBlock
{
public List<IMod> Mods { get; set; }
....
}
私のプログラムの過程を通じて、私はConfigurationBlock
に数ZippedMod
秒を追加し、今私はそれらをシリアル化します。私がやってみました:
using (var stream = new StreamWriter("config.xml"))
{
var ser = new XmlSerializer(typeof(ConfigurationBlock));
ser.Serialize(stream, configBlock);
}
をしかし、私はこのエラーを取得:
There was an error reflecting type 'MinecraftModManager.ConfigurationBlock'.
|-Inner Exception:
Cannot serialize member 'MinecraftModManager.ConfigurationBlock.Mods' of type 'System.Collections.Generic.List`1[[MinecraftModManager.IMod, MinecraftModManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]', see inner exception for more details.
|-Inner Exception:
Cannot serialize member MinecraftModManager.ConfigurationBlock.Mods of type MinecraftModManager.IMod because it is an interface.
ヘルプ?
しかし、私はインターフェイスを使用する必要があります。そうしないと、プログラム全体が動作しません。 – Entity
@TheAdamGaskinsインターフェイスは純粋な仮想メソッドを持つ抽象基本クラスにすぎません。なぜ抽象基底クラスを上回るインターフェースでなければならないのですか? –
ああ、あなたが「具体的なタイプを使用しなければならない」ということを誤解していました。しかし、抽象クラスへのインタフェースを変更すると、すべてが魔法のように修正されます...? – Entity