シリアライゼーションについて見つけたものはすべて調べましたが、なぜこれが機能しないのかわかりません。ビデオ クラスと曲クラスの基本クラスである myMediaInterface オブジェクトの List をシリアル化します。曲のクラスを以下に置きます。null のすべてのプロパティは xml ファイルにシリアル化されていますが、値を持つすべてのプロパティはシリアル化されていません。シリアライゼーション コードが呼び出されるまでに、リストには 882 曲があり、882 のシリアライズされた曲が xml ファイルに出力されますが、null 以外または 0 のプロパティはありません。
[XmlInclude(typeof(Song))]
[XmlInclude(typeof(Video))]
public abstract class myMediaInterface
{
public string type { get; set; }
public string path { get; set; }
public String artist { get; set; }
public String title { get; set; }
public String album { get; set; }
public uint trackNumber { get; set; }
public String genre1 { get; set; }
public TimeSpan duration { get; set; }
public uint rating { get; set; }
public uint bitrate { get; set; }
public uint year { get; set; }
public List<String> genre { get; set; }
public int indexWithinParentCollection { get; set; }
public string displayName { get; set; }
}
public class Song : myMediaInterface
{
public String type
{
get
{
return "Song";
}
set
{
value = "Song";
}
}
public String path { get; set; }
public String artist { get; set; }
public String title { get; set; }
public String album { get; set; }
public uint trackNumber { get; set; }
public String genre1 { get; set; }
public TimeSpan duration { get; set; }
public uint rating { get; set; }
public uint bitrate { get; set; }
public uint year { get; set; }
public List<String> genre { get; set; }
public int indexWithinParentCollection { get; set; }
public String displayName { get; set; }
}
シリアル化コード:
static async private Task saveState()
{
try
{
XmlSerializer xmlSer = new XmlSerializer(typeof(List<myMediaInterface>), new Type[]{typeof(Song)});
StorageFile musicFile = await KnownFolders.MusicLibrary.CreateFileAsync("PlaylistXFastMusicLoading", CreationCollisionOption.ReplaceExisting);
IRandomAccessStream musicFileRandomAccess = await musicFile.OpenAsync(FileAccessMode.ReadWrite);
IOutputStream outputStream = musicFileRandomAccess.GetOutputStreamAt(0);
xmlSer.Serialize(outputStream.AsStreamForWrite(), _musicList);
outputStream.Dispose();
}
catch (Exception exception)
{
System.Diagnostics.Debug.WriteLine(exception);
}
}
async private void loadState()
{
try
{
XmlSerializer xmlSer = new XmlSerializer(typeof(List<myMediaInterface>), new Type[] { typeof(Song) });
StorageFile sampleFile = await KnownFolders.MusicLibrary.CreateFileAsync("PlaylistXFastMusicLoading", CreationCollisionOption.OpenIfExists);
IInputStream fileStream = await sampleFile.OpenReadAsync();
_musicList = (List<myMediaInterface>)xmlSer.Deserialize(fileStream.AsStreamForRead());
fileStream.Dispose();
}
catch (Exception exception)
{
System.Diagnostics.Debug.WriteLine(exception);
}
}
およびリストクラスの初期化
public static List<myMediaInterface> musicList = new List<myMediaInterface>();
public static List<myMediaInterface> _musicList
{
get { return musicList; }
set { value = musicList; }
}