我正在使用 C# 和 JSON.Net 来阅读此 JSON 文档:
{
"myValue": "foo.bar.baz"
}
我的目标是使用字符串值"foo.bar.baz"作为对象点表示法来访问foo对象中的foo.bar.baz的值:
public Foo foo = new Foo();
var client = new WebClient();
client.Headers.Add("User-Agent", "Nobody");
var json = client.DownloadString(new Uri("http://www.example.com/myjson.json"));
JObject o = JObject.Parse(json);
foreach (JProperty prop in o.Children<JProperty>()){
Response.Write(????); // should write "Hello World!"
}
仅供参考,这里是 Foo 类:
public class Foo {
public Foo() {
this.bar = new Foo();
this.bar.baz = "Hello World";
}
}
假设您有一个具有名为 foo
的属性的对象,您可以使用反射来查找您要查找的值。这将适用于字段,但不要这样做,请改用公共属性。
public class SomeContainer
{
public Foo foo { get; set; }
}
var container = new SomeContainer();
var myValuePath = "foo.bar.baz"; // Get this from the json
string[] propertyNames = myValuePath.Split('.');
object instance = container;
foreach (string propertyName in propertyNames)
{
var instanceType = instance.GetType();
// Get the property info
var property = instanceType.GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance);
// Get the value using the property info. 'null' is passed instead of an indexer
instance = property.GetValue(instance, null);
}
// instance will be baz after this loop
有各种各样的潜在NullReferenceException
所以你必须更防御地编码。但是,这对您来说应该是一个好的开始。