SerializationInfo TryGetValue

29 בינואר 2013

אין תגובות

כתבתי מספר Extensions עבור מחלקת SerializationInfo.

Code Snippet
namespace System.Runtime.Serialization
{
    public static class SerializationExtensions
    {
        public static IEnumerable<SerializationEntry> AsEnumerator(this SerializationInfo info)
        {
            foreach (var item in info)
            {
                yield return item;
            }
        }

        public static T TryGetValue<T>(this SerializationInfo info, string name, T defaultValue = default(T))
        {
            foreach (var item in info)
            {
                if (item.Name == name)
                    return (T)item.Value;
            }

            return defaultValue;
        }

        public static T TryGetValue<T>(this SerializationInfo info, string[] names, T defaultValue = default(T))
        {
            foreach (var name in names)
            {
                foreach (var item in info)
                {
                    if (item.Name == name)
                        return (T)item.Value;
                }
            }

            return defaultValue;
        }
    }
}

 

כעת ניתן לכתוב קוד כזה:

Code Snippet
[Serializable]
class MyClass : ISerializable
{
    public string Name { get; set; }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("Name", Name);
    }

    private MyClass(SerializationInfo info, StreamingContext context)
    {
        Name = info.TryGetValue<string>(new string[] { "<Name>k__BackingField", "Name" });
    }
}

 

המטרה של הקוד הנ”ל, היא כדי לאפשר בקלות להוציא את המידע במידה ועשיתם בעבר סריליזציה של המידע לפני שממשתם את הממשק ISerializable, מה שיגרום לכך שהשם יהיה השם של ה – backing field.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *