我正在使用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"
}
我可以用动态对象做我在这里问的问题吗?
答案 0 :(得分:4)
我怀疑你可以使用:
public void Update(string key, string Value)
{
File[key] = Value;
}
这取决于动态对象如何实现索引,但如果这是一个Json.NET JObject
或类似的,我希望它能够工作。重要的是要理解它不能保证适用于一般的dynamic
表达式。
如果您实际上只需要这种操作(至少在课堂内),您可以考虑使用JObject
作为字段类型,然后在需要时将其公开为dynamic
。
答案 1 :(得分:2)
好的,事实证明我很特别。以下是那些可能在未来偶然发现的人的答案,
事实证明你可以像使用数组索引那样使用键,它可以很好地工作。所以:
File[Key] = Value;
以我需要的方式工作而不是
File.Key = Value;
非常感谢!
答案 2 :(得分:1)
如果您正在使用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无法将[]索引应用于' ExpandoObject'
类型的表达式