c# – 将动态转换为特定类型

c# – 将动态转换为特定类型,第1张

概述我在一个部分中检索具有不同对象类型的 JSON. 我把这部分视为动态. 我需要从这个对象获取数据,所以我创建了类似于动态数据的类,如下所示: public class SpecificObject1{ public string Title{get; set;} public object[] ViewElements{get; set} public object An 我在一个部分中检索具有不同对象类型的 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";

你不需要任何演员.

总结

以上是内存溢出为你收集整理的c# – 将动态转换为特定类型全部内容,希望文章能够帮你解决c# – 将动态转换为特定类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存