加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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";

你不需要任何演员.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读