昆明公司建设网站制作,建筑英才网招聘网,快速做课件的网站,网站制作教程 百度文库咨询区 ProfK假如我有一个匿名类型或者动态类型#xff0c;它的结构定义和我的一个强类型的结构是一致的#xff0c;请问 C# 中是否有内置的方法可以强转为指定 强类型 #xff1f;我知道可以使用 AutoMapper#xff0c;但这有点重量级了#xff0c;并且实现起来也稍微繁琐… 咨询区 ProfK假如我有一个匿名类型或者动态类型它的结构定义和我的一个强类型的结构是一致的请问 C# 中是否有内置的方法可以强转为指定 强类型 我知道可以使用 AutoMapper但这有点重量级了并且实现起来也稍微繁琐。回答区 Grimace of Despair你可以先序列化为中间格式然后在后续的某个时刻再反序列化为正确的类型虽然这不是高效率的方式但肯定是非常灵活的实现方式参考如下代码强类型的类定义// Typed definition
class C
{public string A;public int B;
}匿名类实例// Untyped instance
var anonymous new {A Some text,B 666
};接下来你可以将 匿名类型 转化为中间格式然后再反序列化前面定义的强类型。static void Main(string[] args){var json JsonConvert.SerializeObject(anonymous);var c JsonConvert.DeserializeObjectC(json);}理论上来说你也可以使用其他类型的序列化机制 binary serialization , XmlSerializer 或者其他 json 库。jherax可以先将 匿名类型 转为 Dictionary参考如下代码Dictionarystring, object dict obj.GetType().GetProperties().ToDictionary(p p.Name, p p.GetValue(obj, null));然后可以通过 Linq 的方式再反转为对象。ListMyType items anonymousType.Select(t new MyType(t.Some, t.Other)).ToList();另外说一下如果你的 动态类型 和 强类型 之前有继承链关系换句话说如果是在运行时你将某一个强类型赋值给了动态类型那么这一种情况下你是可以直接强转的参考如下class Program{static void Main(string[] args){var person new Person();dynamic dy person;var person2 (Person)dy;Console.ReadLine();}}public class Person{public string Name { get; set; }public int Age { get; set; }}点评区 这是一个比较有意思的问题用 反射序列化 ,AutoMapper 都是些很好的 idea 学习了。