保存对象时Serialization.InvalidDataContractException

时间:2015-03-12 19:40:22

标签: c# windows-phone-8 serialization isolatedstorage

正在使用C#

开发适用于Windows Phone 8.0的应用程序

我需要使用List<Image>

将包含图像列表的类IsolatedStorageSettings保存为属性

第一次,应用程序在使用System.Runtime.Serialization.InvalidDataContractException

保存代码行时崩溃了

我按照序列化对象的说明进行操作 但我仍然得到同样的例外

  

代码:

列出类

 [DataContract]
    public class Lists
    {
        [DataMember]
        public List<Image> ImageTiles = new List<Image>();
    }

保存:

        ImageTiles.Add(CroppedImage);
        lists = (Lists)levels["Lists"];
        lists.ImageTiles = ImageTiles;
        levels["Lists"] = lists;
        levels.Save();

还缺少什么?

1 个答案:

答案 0 :(得分:0)

您收到该错误,因为Image是序列化的无效类型。实际上,该文件需要发送到流并写入文件。这是一个网站,上面有一些关于这个主题的教程:

http://code.tutsplus.com/tutorials/working-with-isolated-storage-on-windows-phone-8--cms-22778

本文中一段特别有用的代码块如下:

private void saveGameToIsolatedStorage(string message)
{
  using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
    {
     using (IsolatedStorageFileStream rawStream = isf.CreateFile("MyFile.store"))
    {
      StreamWriter writer = new StreamWriter(rawStream);
      writer.WriteLine(message); // save the message
      writer.Close();
    }
  }
}

有关I / O的更多信息:

https://msdn.microsoft.com/en-us/library/system.io(v=vs.110).aspx

如何从图像中获取流:

Save stream as image

因此,概述中,您需要做的是:

1)将图像发送到流

MemoryStream ms = new MemoryStream();
myImage.Save(ms, ImageFormat.Jpeg);

2)使用IsolatedStorageFile保存到流

  using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(filePath, FileMode.Create, isf))
    {
        fileStream.Write(ms.ToArray(), 0, ms.Length);
        fileStream.Close();
    }
}