我试图反序列化JSON.我的根对象有一个属性"en.pickthall".我使用动态类型来读取我的JSON.我以为我可以放弃"." 在属性中,因为它是一个本地JSON文件,但是必须有一些方法来访问这样的属性
var result = App_Code.FileIOHelper.ReadFromDefaultFile("ms-appx:///Assets/en.pickthall.json");
dynamic stuff = JsonConvert.DeserializeObject(result);
foreach(var x in stuff.(en.pickthall)) //Tried this intellisense didn't like it
{
}
Run Code Online (Sandbox Code Playgroud)
Art*_*Rey 14
您可以创建一个根类来反序列化并使用JsonProperty:
public class Root
{
[JsonProperty(PropertyName = "en.pickthall")]
public object EnPickthall { get; set; }
public Root() {}
public Root(en_pickthall)
{
this.EnPickthall = en_pickthall;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以打电话
Root stuff = JsonConvert.DeserializeObject<Root>(result);
foreach(var x in stuff.EnPickthall)
{
}
Run Code Online (Sandbox Code Playgroud)
C# 没有任何引用标识符的方法。如果它不是一个有效的标识符,你唯一的选择就是反射。
但是,您的 JSON 反序列化器返回的对象可能会更改标识符以使其在 C# 中可用 - 您可能想要枚举所有属性以检查是否是这种情况。带有索引器的动态对象也可能是一种解决方案(允许例如stuff["en.pickthall"])。
另一种选择是更改序列化程序映射属性的方式。例如,Newtonsoft.Jsoft 允许您使用IContractResolver. .以这种方式将 替换为更符合 C# 标准的东西是很容易的。
您可以不序列化为动态,而是序列化为JObject然后通过访问您的财产
JObject stuff = JsonConvert.DeserializeObject<JObject>(Jsonstring);
var x = stuff.Value<String>("my.property")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7289 次 |
| 最近记录: |