Pythonnet:Python与C#对象(列表/字典)互转的简便方法咨询
Pythonnet中Python与.NET类型互转的简便方法
一、自动将Python对象转换为C#参数
pythonnet自带基础自动类型转换能力,多数常见类型无需手动逐个处理:
- 基本数值类型:Python的
int、float可直接传入期望Int32、Double等.NET值类型的C#函数,框架会自动完成转换,不用手动调用Double(123)这类构造器。 - 泛型集合:创建指定类型的.NET集合(如
List<string>),直接用对应.NET集合的构造器传入Python序列即可:import clr clr.AddReference("System.Collections") from System.Collections.Generic import List, Dictionary # Python列表转C# List<string> py_str_list = ["apple", "banana"] cs_str_list = List[str](py_str_list) # Python字典转C# Dictionary<int, string> py_dict = {1: "one", 2: "two"} cs_dict = Dictionary[int, str](py_dict) - 若需强制转换特定类型,可使用
clr.Convert方法:import clr from System import Double py_num = 123 cs_double = clr.Convert(py_num, Double)
二、将C#返回对象转换为Python类型
对于.NET返回的对象,可通过以下方式快速转为Python原生类型:
- .NET集合转Python集合:
List<T>、ArrayList等可迭代.NET集合,直接用list()包裹即可转为Python列表:py_list = list(cs_list)Dictionary<K,V>直接用dict()转为Python字典:py_dict = dict(cs_dict)
- 自定义C#对象转Python字典:
可通过反射提取对象的公共属性,实现通用转换函数:
调用示例:def cs_object_to_py_dict(cs_obj): py_dict = {} for prop in cs_obj.GetType().GetProperties(): # 递归处理嵌套的C#对象 value = prop.GetValue(cs_obj) if value is not None and hasattr(value, "GetType"): py_dict[prop.Name] = cs_object_to_py_dict(value) else: py_dict[prop.Name] = value return py_dictpy_obj_dict = cs_object_to_py_dict(cs_custom_object)
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

