对于我的一些单元测试,我希望能够构建特定的JSON值(在本例中是记录相册),这些值可以用作测试系统的输入。
下面的代码:
var jsonObject = new JObject();
jsonObject.Add("Date", DateTime.Now);
jsonObject.Add("Album", "Me Against The World");
jsonObject.Add("Year", 1995);
jsonObject.Add("Artist", "2Pac");
这很好用,但是我从来没有真正喜欢过"magic string"语法,我更喜欢JavaScript中更接近expando-property语法的语法,如下所示:
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";
8条答案
按热度按时间6psbrbz91#
好吧,不如这样:
cbwuti442#
您可以使用
JObject.Parse
操作,只需提供单引号分隔的JSON文本。这有一个很好的好处,就是它实际上是JSON,所以读起来就是JSON。
或者您有动态的测试数据,您可以使用
JObject.FromObject
操作并提供一个内联对象。Json.net documentation for serialization
jtw3ybtb3#
当JSON属性不是有效的C#变量名时,
dynamic
和JObject.FromObject
解决方案都不起作用,例如"@odata.etag"
。在我的测试用例中,我更喜欢索引器初始化器语法:初始化
JObject
和向其添加属性时使用单独的封闭符号集使得索引初始化器比经典的对象初始化器更具可读性,特别是在如下复合JSON对象的情况下:使用对象初始化器语法,上述初始化将是:
cig3rfwq4#
在某些环境中,您不能使用动态(例如Xamarin.iOS),或者在某些情况下,您只需寻找先前有效答案的替代方案。
在这些情况下,您可以:
更多文档请访问:http://www.newtonsoft.com/json/help/html/CreatingLINQtoJSON.htm
2w3rbyxf5#
迟早你会有一个特殊字符的属性。例如,创建日期。连字符将不允许在属性名称。这将打破你的代码。在这种情况下,你可以使用索引或索引和属性的组合。
7bsow1i66#
从属性创建newtonsoft JObject的简单方法。
这是用户属性示例
我希望newtonsoft JObject中的这个属性是:
输出将如下所示:
jgzswidk7#
我建议您将nameof表达式与您要构建的结构的模型结合起来使用,您觉得怎么样?
示例:
作为去除"魔术字符串"方面的一个额外好处--这也会给你带来一点重构能力。你可以很容易地重命名
record
的任何给定属性名,它应该会更新nameof()
表达式返回的值。xtfmy6hx8#
您可以使用Newtonsoft库,并按如下方式使用它