更改C#动态类型的属性值

更改C#动态类型的属性值,c#,.net,object,dynamic,propertyinfo,C#,.net,Object,Dynamic,Propertyinfo,是否有任何方法可以更改动态类型属性值? 代码示例: dynamic result = new { Status = "WARNING", Modified = false, Message = string.Empty }; result.Status = "OK"; 使用C#这可能吗? 谢谢不,这是不可能的。您将得到一个运行时错误,告诉您匿名类型的属性Status为写保护或只读 供将来使用,这里是 报告说: 匿名类型包含一个或多个公共只读属性 您需要使

是否有任何方法可以更改动态类型属性值? 代码示例:

dynamic result = new { Status = "WARNING", Modified = false, Message = string.Empty };
result.Status = "OK";
使用C#这可能吗?
谢谢

不,这是不可能的。您将得到一个运行时错误,告诉您匿名类型的属性
Status
为写保护或只读

供将来使用,这里是

报告说:

匿名类型包含一个或多个公共只读属性

您需要使用其他属性的原始值重新创建对象:

var result = new { Status = "WARNING", Modified = false, Message = string.Empty };
result = new { Status = "OK", Modified = result.Modified, Message = result.Message };
Console.WriteLine(result.Status);
输出:


在c#4.0中增加了动态数据类型。它用于避免编译时类型检查。编译器在编译时不检查动态类型变量的类型,而是在运行时获取类型

不过,在大多数情况下,动态数据类型的行为类似于对象

在上述示例中: 您已经创建了一个类似于类类型的匿名类型变量,但它只能包含公共只读成员,因此在本例中无法更改result.Status值

要解决这个问题:


我认为你应该使用像字典这样的通用集合 代码可能如下所示:

var result = new Dictionary<string, object>() { {"Status", "Warning"}, {"Modified", false}, {"Message", string.empty} };

result ["Status"] = "Ok";
var result=new Dictionary(){{“Status”,“Warning”},{“Modified”,false},{“Message”,string.empty};
结果[“状态”]=“正常”;

为什么不试试呢?嗯,我现在不能试试,但是。您是否尝试过简单的result.Status=“something”示例?尝试过,尝试过使用PropertyInfo,但SetValue在运行时失败。NadaOK,从语法角度看,它是有效的。然后我需要使用
returnjson(result)
以Json的形式返回
result
。有没有办法强制转换Dictionary()以返回正确的Json?这样,它将返回key.value元组的Json数组。