我把这部分视为动态.
我需要从这个对象获取数据,所以我创建了类似于动态数据的类,如下所示:
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";
你不需要任何演员.
总结以上是内存溢出为你收集整理的c# – 将动态转换为特定类型全部内容,希望文章能够帮你解决c# – 将动态转换为特定类型所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)