使用propertyname.subname创建JObject

时间:2018-10-05 10:31:47

标签: c# json json.net

我正在尝试动态创建一个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(); 但这会创建一个我不需要的新子对象。

1 个答案:

答案 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