我正在尝试动态创建一个JObject进行单元测试,但是它似乎不喜欢name.subname
作为属性
我要为其创建JObject的json是
{ "UserDetails": {
"FirstName": "Test1",
"Surname": "Test2",
"UserID": "123456789",
"Children1.Active1": false,
"Children1.Active2": false
}
}
我的C#代码是
dynamic jsonObject = new JObject();
jsonObject.UserDetails = new JObject();
jsonObject.UserDetails.UserID = "123456789";
jsonObject.UserDetails.FirstName = "Test1";
jsonObject.UserDetails.Surname= "Test2";
但是我不确定如何将Children1.Active
添加到JObject jsonObject. UserDetails
中,但是它不适用于jsonObject.UserDetails.Children.Active1 = false
。
我已经验证了json,并且通过了有效的json验证。
如何将Children1.Active
添加到JObject?
我尝试了jsonObject.UserDetails.Children1 = new JObject();
但这会创建一个我不需要的新子对象。
答案 0 :(得分:3)
"Children1.Active2"
不是嵌套对象,它是名称字符串中带有句点的属性。而且由于您是通过dynamic
进行所有操作的,因此这很麻烦,因为即使JSON属性名称可以包含c#标识符也不能包含此类字符。
在这种情况下,使用类型为JObject
的方法及其编译时绑定方法(特别是其string indexer方法)比使用dynamic
更容易:
var jsonObject = new JObject();
var userDetails = new JObject();
jsonObject["UserDetails"] = userDetails;
userDetails["UserID"] = "123456789";
userDetails["FirstName"] = "Test1";
userDetails["Surname"] = "Test2";
userDetails["Children1.Active1"] = false;
userDetails["Children1.Active2"] = false;
由于dynamic
可以有一些run-time performance penalties,因此性能也应该更高。
提琴here。