引用 C# 'dynamic' 对象的动态成员
Referring to dynamic members of C# 'dynamic' object
我正在使用 JSON.NET 将 JSON 文件反序列化为 C# 中的 dynamic
对象。
在方法内部,我想传入一个 string
并引用动态对象中的指定属性。
例如:
public void Update(string Key, string Value)
{
File.Key = Value;
}
其中 File
是动态对象,Key
是传入的字符串。假设我想传入键 "foo" 和值 "bar",我会这样做:
Update("foo", "bar");
,但是由于 dynamic
对象类型的性质,这导致
{
"Key":"bar"
}
相对于:
{
"foo":"bar"
}
是否可以使用动态对象执行我在这里提出的要求?
好吧,事实证明我很特别。以下是为将来可能遇到此问题的人提供的答案,
事实证明,您可以像使用数组索引一样使用键,而且效果很好。所以:
File[Key] = Value;
以我需要的方式工作,而不是
File.Key = Value;
谢谢!
我怀疑你可以使用:
public void Update(string key, string Value)
{
File[key] = Value;
}
这取决于动态对象如何实现索引,但如果这是 Json.NET JObject
或类似的,我希望它能工作。重要的是要了解它不能保证适用于一般 dynamic
表达式。
如果您只是真正需要这种操作(至少在 class 内),您可以考虑使用 JObject
作为字段类型,然后将其公开为 dynamic
当你需要的时候。
如果您使用 JSON.NET 中的 JObject
,您可以做到。它不适用于 ExpandoObject
.
示例:
void Main()
{
var j = new Newtonsoft.Json.Linq.JObject();
var key = "myKey";
var value = "Hello World!";
j[key] = value;
Console.WriteLine(j["myKey"]);
}
这个简单示例按预期打印 "Hello World!"。因此
var File = new Newtonsoft.Json.Linq.JObject();
public void Update(string key, string Value)
{
File[key] = Value;
}
如您所愿。如果您将上例中的 File
声明为
dynamic File = new ExpandoObject();
你会得到一个运行时错误:
CS0021 Cannot apply indexing with [] to an expression of type 'ExpandoObject'
我正在使用 JSON.NET 将 JSON 文件反序列化为 C# 中的 dynamic
对象。
在方法内部,我想传入一个 string
并引用动态对象中的指定属性。
例如:
public void Update(string Key, string Value)
{
File.Key = Value;
}
其中 File
是动态对象,Key
是传入的字符串。假设我想传入键 "foo" 和值 "bar",我会这样做:
Update("foo", "bar");
,但是由于 dynamic
对象类型的性质,这导致
{
"Key":"bar"
}
相对于:
{
"foo":"bar"
}
是否可以使用动态对象执行我在这里提出的要求?
好吧,事实证明我很特别。以下是为将来可能遇到此问题的人提供的答案,
事实证明,您可以像使用数组索引一样使用键,而且效果很好。所以:
File[Key] = Value;
以我需要的方式工作,而不是
File.Key = Value;
谢谢!
我怀疑你可以使用:
public void Update(string key, string Value)
{
File[key] = Value;
}
这取决于动态对象如何实现索引,但如果这是 Json.NET JObject
或类似的,我希望它能工作。重要的是要了解它不能保证适用于一般 dynamic
表达式。
如果您只是真正需要这种操作(至少在 class 内),您可以考虑使用 JObject
作为字段类型,然后将其公开为 dynamic
当你需要的时候。
如果您使用 JSON.NET 中的 JObject
,您可以做到。它不适用于 ExpandoObject
.
示例:
void Main()
{
var j = new Newtonsoft.Json.Linq.JObject();
var key = "myKey";
var value = "Hello World!";
j[key] = value;
Console.WriteLine(j["myKey"]);
}
这个简单示例按预期打印 "Hello World!"。因此
var File = new Newtonsoft.Json.Linq.JObject();
public void Update(string key, string Value)
{
File[key] = Value;
}
如您所愿。如果您将上例中的 File
声明为
dynamic File = new ExpandoObject();
你会得到一个运行时错误:
CS0021 Cannot apply indexing with [] to an expression of type 'ExpandoObject'