2

オブジェクトを分離ストレージに保存しようとしましたが、受信されましたA first chance exception of type 'System.Runtime.Serialization.InvalidDataContractException' occurred in System.Runtime.Serialization.ni.dll

私のオブジェクトクラス

[DataContract]
public class NoteContent : IEnumerable
{
    [DataMember] 
    public Microsoft.Phone.Controls.SupportedPageOrientation SupportedOrientation{ get; set; }
    [DataMember] 
    public List<Character> NoteCharacterList { get; set; }
    [DataMember] 
    public string NoteFileName { get; set; }

    private List<Character> notecontent = new List<Character>();

    public void Add(Character charObj)
    {
        notecontent.Add(charObj);
        NoteCharacterList = notecontent;
    }

    public void Clear()
    {
        notecontent.Clear();
    }

    public Character this[int id]
    {
        get { return notecontent[id]; }
    }

    public IEnumerator<Character> GetEnumerator()
    {
        return notecontent.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

オブジェクトをシリアル化して保存するために使用しているコード。この行でエラーが発生しました_mySerializer.WriteObject(targetFile, sourceData);

    public void SaveMyData(NoteContent sourceData, String targetFileName)
    {
        string TargetFileName = String.Format("{0}/{1}.dat", TargetFolderName, targetFileName);

        using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
        {

            if (!store.DirectoryExists(TargetFolderName))
                store.CreateDirectory(TargetFolderName);
            try
            {
                using (var targetFile = store.CreateFile(TargetFileName))
                {
                    _mySerializer.WriteObject(targetFile, sourceData);
                }
            }
            catch (Exception e)
            {
                store.DeleteFile(TargetFileName);
            }
        }

    }

オブジェクトには、オブジェクトとコントロールのリストが含まれています。

ここに画像の説明を入力

保存するメイン オブジェクト内のオブジェクトのリスト ここに画像の説明を入力

イメージ コントロールやキャンバス コントロールなどのオブジェクトをシリアル化できないためですか? そのようなオブジェクトを分離ストレージに保存する最善の方法は何ですか?

更新 1

次のプロパティのみを含めるようにオブジェクトを単純化しましたが、それでも同じエラーが発生します。Points と Char はシリアライズ可能ですか?

    public Point ImagePosition { get; set; }
    public Char CharText { get; set; }
    public double ImageDegree { get; set; }
    public double ImageScale { get; set; }
    public int ImageZOrder { get; set; }
    public bool IsResizeCancel { get; set; }
    public double MaxSliderValue { get; set; }
    public double CurrentWidth { get; set; }
    public double CurrentHeight { get; set; }
4

2 に答える 2

0

なんとか解決しました。Copying object to another object を使用してシリアル化されない可能性のあるプロパティを削除してオブジェクトを単純化しましたが、特定のプロパティを削除しました Windows Phone 8

簡易クラス

[DataContract]
public class CharacterClone
{
    [DataMember] 
    public Point ImagePosition { get; set; }
    [DataMember] 
    public Char CharText { get; set; }
    [DataMember] 
    public double ImageDegree { get; set; }
    [DataMember] 
    public double ImageScale { get; set; }
    [DataMember] 
    public int ImageZOrder { get; set; }
    [DataMember] 
    public bool IsResizeCancel { get; set; }
    [DataMember] 
    public double MaxSliderValue { get; set; }
    [DataMember] 
    public double CurrentWidth { get; set; }
    [DataMember] 
    public double CurrentHeight { get; set; }

    public CharacterClone(Character original)
    { 
        ImagePosition = original.ImagePosition;
        CharText = original.CharText;
        ImageDegree = original.ImageDegree;
        ImageScale = original.ImageScale;
        ImageZOrder = original.ImageZOrder;
        IsResizeCancel = original.IsResizeCancel;
        MaxSliderValue = original.MaxSliderValue;
        CurrentWidth = original.CurrentWidth;
        CurrentHeight = original.CurrentHeight;
    }
}

もう 1 つ注意すべき重要な点は、ファイル パスです。WP8では、セパレーターは次のようにする必要があり\\ます/

string TargetFileName = String.Format("{0}\\{1}.dat", TargetFolderName, targetFileName);
于 2013-03-28T14:57:26.077 に答える