我有一个类:
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
。
我如何将其反序列化为Dictionary
或DictionaryEx
,具体取决于应用是否具有DictionaryEx
类型?
DLL共享不是一个选项。我可以为此对象添加代码和属性,但我不能(?)更改(反)序列化代码。 (De)序列化可能是通过MVC的会话(de)序列化器完成的。
(我试图获得Dictionary
,其行为与我的应用中的上述代码相同,但在其他应用中却是常规Dictionary
。)
答案 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,并且在任何一种情况下一切都应该正常工作