如何在 C# 和 JSON.Net 中将从 JSON 返回的字符串转换为对象点表示法



我正在使用 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所以你必须更防御地编码。但是,这对您来说应该是一个好的开始。

相关内容

  • 没有找到相关文章

最新更新