序列化为父类型?

时间:2017-03-24 20:03:37

标签: c# asp.net-mvc

我有一个类:

public class DictionaryEx<TKey, TValue> : Dictionary<TKey, TValue> {
    public new TValue this[TKey key] {
        get {
            if(base.ContainsKey(key)) {
                return base[key];
            }
            return default(TValue);
        }
        set {
            if(value.Equals(default(TValue))) {
                if(base.ContainsKey(key)) {
                    base.Remove(key);
                }
            }
            else {
                base[key] = value;
            }
        }
    }
}

正如您所看到的,它是具有不同getter / setter语义的Dictionary

我如何将其反序列化为DictionaryDictionaryEx,具体取决于应用是否具有DictionaryEx类型?

DLL共享不是一个选项。我可以为此对象添加代码和属性,但我不能(?)更改(反)序列化代码。 (De)序列化可能是通过MVC的会话(de)序列化器完成的。

(我试图获得Dictionary,其行为与我的应用中的上述代码相同,但在其他应用中却是常规Dictionary。)

2 个答案:

答案 0 :(得分:2)

扩展方法怎么样,我知道它不像重载[]那样花哨。

这会有所帮助:

public static class DictionaryExtensions
{
    public static void SetValue<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, TValue value)
    {
        if (value == null && dictionary.ContainsKey(key))
        {
            dictionary.Remove(key);
        }
        else
        {
            dictionary[key] = value;
        }
    }

    public static TValue GetValue<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key)
    {
        if (dictionary.ContainsKey(key))
        {
            return dictionary[key];
        }
        return default(TValue);
    }
}

答案 1 :(得分:0)

我不确定你必须做什么。既然您没有为DictionaryEx类添加任何新属性,那么它的(可能是JSON)序列化输出是否与普通Dictionary的序列化输出相同?我相信是这种情况,因此任何具有DictionaryEx类的应用程序都应该能够将其反序列化为DictionaryEx,而其他应用程序应该能够反序列化与普通字典完全相同的JSON,并且在任何一种情况下一切都应该正常工作