c# – 将动态转换为特定类型
发布时间:2020-12-15 23:33:43 所属栏目:百科 来源:网络整理
导读:我在一个部分中检索具有不同对象类型的 JSON. 我把这部分视为动态. 我需要从这个对象获取数据,所以我创建了类似于动态数据的类,如下所示: public class SpecificObject1{ public string Title{get; set;} public object[] ViewElements{get; set} public ob
我在一个部分中检索具有不同对象类型的
JSON.
我把这部分视为动态. 我需要从这个对象获取数据,所以我创建了类似于动态数据的类,如下所示: public class SpecificObject1 { public string Title{get; set;} public object[] ViewElements{get; set} public object AnyAttributes{get; set;} } 以下是我想将其转换为此特定对象的方法: var @switch = new Dictionary<Type,Action> { { typeof(x),() => jsonObj.Some = jsonObj.Some as SpecificObject1},{ typeof(y),() => ......} }; 使用as转换返回null. 编辑: 动态包含: AnyAttributes: {object} Title: "title" ViewElements: object[0] 解决方法
您无法更改对象的类型 – 无论是动态还是任何其他编译时类型.因此,即使您将jsonObj.Some作为SpecificObject1分配给jsonObj.Some,您也无法更改其编译时类型(在您的情况下可能是动态的,这是一个编译时类型).
这意味着你可以这样做: int a = 3; a = a as string; 这显然是无意义的. a是int类型,无法更改.因此,即使你*可以将一个字符串转换为字符串,也不能将结果(可能是sting类型)分配给a,因为实际上是int类型. 这同样适用于动态实例: dynamic b = a as Bar; 这仍将评估b为动态类型.但是如果a之前是一个Bar-instance,那么b的运行时类型肯定也是Bar.无论如何你没有得到任何东西,因为b的编译时类型仍然是动态的 – 使它成为无操作. 编辑:为了获得可以使用的编译时类型,您必须基于jsonObj.Some创建一个新的SpecificType实例: var newValue = new SpecificObject { Title = jsonObj.Some.Title,ViewElements = jsonObj.Some.ViewElements,AnyAttributes = jsonObj.Some.AnyAttributes } 但是,您无法将此分配给jsonObj.Some并期望后者在编译时为SpecificObject类型.无论如何,因为它已经是动态的,你可以用它做你想做的一切,例如设置它的标题: jsonObj.Some.Title = "NewTitle"; 你不需要任何演员. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |