我正在使用从我的数据库复制的JSON字符串在Visual Studio中运行一些C#单元测试,例如:
var delimiters = new string[] { "\\v", "\v", "\r\n" };
string[] split = textWithStyle.Text.Split( delimiters);
我想在我的代码中将JSON字符串解析为JObject:
{
"key" : "Foo",
"format" : "Bar"
}
但是,我不能这样做,因为Visual Studio不会转义字符串中的引号。
我知道我可以添加转义符,但是,字符串可能很长,这意味着手动添加转义字符需要很长时间。
将复制的JSON字符串解析为JObject的最简单方法是什么?
答案 0 :(得分:13)
使用@附加字符串,使用逐字字符串文字(MSDN)。然后用双引号(“”)替换引号(“)
这比使用反斜杠转义引号更具可读性。
JObject.Parse(
@"{
""key"" : ""Foo"",
""format"" : ""Bar""
}");
答案 1 :(得分:4)
对于我使用大量JSON的测试,我喜欢将它们存储在嵌入到项目DLL中的“.json”文件中。
请注意,您需要使用System.Reflection来实现此目的。
public string GetFileFromManifest(string path){
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(path))
{
stream.Position = 0;
using (var streamReader = new StreamReader(stream))
{
return streamReader.ReadToEnd();
}
}
}
使用DLL路径调用,即:
GetFileFromManifest("The.Name.Of.The.Dll.FolderNameOfEmbeddedFiles.Filename.json");
GetManifestResourceStream的文档:https://msdn.microsoft.com/en-us/library/xc4235zt(v=vs.110).aspx
此外,您可以将JObject.Parse添加到此方法或创建一个新方法以将其作为JSON。
答案 2 :(得分:2)
粘贴,突出显示选择,查找和替换"为\"
答案 3 :(得分:2)
将JSON放在某个目录中的专用.json文件中(例如TestData/data.json
),并将文件内容作为字符串加载。请务必将data.json
的文件属性设置为Copy to output directory
。
// File Loader
public static class ReadJsonFile
{
public static string GetFileFromDisk(string path)
{
var absPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
return File.ReadAllText(absPath + path);
}
}
// Call the loader
var resultString = ReadJsonFile.GetFileFromDisk("/TestData/data.json");
JObject.Parse(resultString);
这样更干净,可以避免与大型JSON字符串混在一起。这可能是一种痛苦。
答案 4 :(得分:1)
ReSharper可以无缝进行,但是当然要花钱。
还有一个免费的VS扩展程序可以做到这一点,在这里:docs