c# - 如何在 C# 中将对象转换为 Dictionary<TKey, TValue>?

标签 c# .net object dictionary

如何将动态对象转换为 Dictionary<TKey, TValue>在 C# 中我能做什么?

public static void MyMethod(object obj)
{
    if (typeof(IDictionary).IsAssignableFrom(obj.GetType()))
    {
        // My object is a dictionary, casting the object:
        // (Dictionary<string, string>) obj;
        // causes error ...
    }
    else
    {
        // My object is not a dictionary
    }
}

最佳答案

上面的答案都很酷。我发现用 json 序列化对象并反序列化为字典很容易。

var json = JsonConvert.SerializeObject(obj);
var dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

我不知道性能是如何受到影响的,但这更容易阅读。您也可以将它包装在一个函数中。

public static Dictionary<string, TValue> ToDictionary<TValue>(object obj)
{       
    var json = JsonConvert.SerializeObject(obj);
    var dictionary = JsonConvert.DeserializeObject<Dictionary<string, TValue>>(json);   
    return dictionary;
}

像这样使用:

var obj = new { foo = 12345, boo = true };
var dictionary = ToDictionary<string>(obj);

关于c# - 如何在 C# 中将对象转换为 Dictionary<TKey, TValue>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11576886/

相关文章:

javascript - 覆盖 javascript 文件对象

c# - AutoMapper 子对象中没有前缀名称的展平

c# - 格式化字符串以显示自定义十进制值

.net - 在WPF中创建吉他和弦编辑器(来自RichTextBox?)

c# - 扩展方法重载选择

javascript - 使用数组中的值更新对象数据

c# - 如何在 C# 对象中表达数组类型

c# - 如何压缩文件夹和文件?

.net - 我如何从 Stopwatch.GetTimestamp() 到 DateTime?

java - 为什么对象分配引用内存位置,而基本类型则不然?