WP7可序列化类的最佳实践[就是它的完成方式]

时间:2011-03-02 15:35:16

标签: c# windows-phone-7


我试图让这个基本类正确,它应该执行以下操作:

  • 有一个字符串列表,每秒创建一个新字符串。
  • 有一个当前字符串,表示当前字符串(在本例中为最后创建的字符串)
  • 使用可观察的集合进行数据绑定支持

该类的代码如下所示,整个项目可以在以下链接中找到:
http://www.filesavr.com/XXRM3TJ9LSW6FEC

任何使这个更好的方法,或者它“尽可能好”。

谢谢, 克里斯

PS:我知道,这不是一个真正的问题,但如果我将基于这个设计的很多课程,所以我想确保不重复错误。我虽然创建了我自己的可观察集合,它支持“当前”和序列化,但我对泛型属性有点挣扎。你会创建一个,还是使用我在下面的例子中使用的方法?

[DataContract]
public class SerializerTest : INotifyPropertyChanged
{
    private DispatcherTimer _dT;
    private List<string> _strings;

    public static string Key { get{return typeof (SerializerTest).FullName;} }

    [DataMember]
    public List<string> Strings
    {
        get
        {
            return _strings;
        }
        set
        {
            _strings = value;
            StringsObservable = new ObservableCollection<string>();
            foreach (var s in _strings) StringsObservable.Add(s);
        }
    }


    [DataMember]
    public int CurrentStringIndex { get; set; }


    public ObservableCollection<string> StringsObservable { get; set; }
    public string CurrentString
    {
        get
        {
            if (Strings == null) return null;
            if (Strings.Count <= CurrentStringIndex) return null;
            return Strings[CurrentStringIndex];
        }
    }

    public SerializerTest()
    {
        Strings = new List<string>();
        StringsObservable = new ObservableCollection<string>();
        InteralInit();
    }

    [OnDeserialized]
    public void Init(StreamingContext c)
    {
        InteralInit();
    }

    private void InteralInit()
    {
        _dT = new DispatcherTimer();
        _dT.Tick += (a, b) => AddString();
        _dT.Interval = new TimeSpan(0, 0, 0, 2);
        _dT.Start();
    }

    public void AddString()
    {
        Strings.Add(DateTime.Now.ToLongTimeString() + ":" + DateTime.Now.Millisecond);
        StringsObservable.Add(Strings.Last());

        CurrentStringIndex = Strings.Count - 1;
        if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(""));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

2 个答案:

答案 0 :(得分:1)

事实证明,二进制序列化比数据协定序列化程序快得多,因此您可能需要考虑该选项。凯文马歇尔有一个很棒的帖子:http://blogs.claritycon.com/kevinmarshall/2010/11/03/wp7-serialization-comparison/

答案 1 :(得分:1)

您可能会发现我们在Windows Phone 7上序列化为二进制文章的文章非常有用:

http://verysoftware.co.uk/blog/serializing-to-binary-on-wp7-part1/
http://verysoftware.co.uk/blog/serializing-to-binary-on-wp7-part2/