字符串的显示方式因使用方案而异



加载到可观察集合中的JSON数据出现一些奇怪的行为。

下面是 JSON 导入的示例,以及如何显示我的文件夹路径。

  {
 "projectNumber":"16000",
 "projectName":"Sample Project",
 "Directory":"@"C:\Users"",  }

到目前为止,我已经能够在加载到我的可观察集合后按预期使用数据。例如,消息框按预期在消息框中显示(选定文件夹):@"C:\Users"

这是我希望我的树视图使用的路径。奇怪的是,它没有使用它,而是使用我的 JSON 导入中的原始路径格式("@\"C:\Users\"),并抛出"路径中的非法字符"错误。

private void ListDirectory(TreeView treeView, string path)
    {
        treeView.Items.Clear();
        var rootDirectoryInfo = new DirectoryInfo(path);
        treeView.Items.Add(CreateDirectoryNode(rootDirectoryInfo));
    }
    private static TreeViewItem CreateDirectoryNode(DirectoryInfo directoryInfo)
    {
        var directoryNode = new TreeViewItem { Header = directoryInfo.Name };
        foreach (var directory in directoryInfo.GetDirectories())
            directoryNode.Items.Add(CreateDirectoryNode(directory));
        foreach (var file in directoryInfo.GetFiles())
            directoryNode.Items.Add(new TreeViewItem { Header = file.Name });
        return directoryNode;
    }
    private void button_Click(object sender, RoutedEventArgs e)
    {
        Project selectedProject = comboBox.SelectedItem as Project;
        selectedfolder = selectedProject.Directory.ToString();
        MessageBox.Show(selectedfolder);
        if (selectedProject != null)
        {
            this.ListDirectory(treeView, selectedfolder);
        } 

有人看到我在这里缺少什么,以及为什么相同的字符串会根据它的使用方式而有所不同?

@""字符串文本用于帮助编写包含反斜杠字符串的代码。 例如,这段代码包含对有效路径的引用,而@""位只是告诉 C# 编译器以不同于普通 C 样式字符串的方式处理反斜杠:

string example1 = @"C:Users";
Debug.WriteLine(example1); // Outputs C:Users
// This works
var temp1 = new DirectoryInfo(example1);

一旦您实际将@""位嵌入到字符串中,您最终会得到一个包含@"字符的字符串,这在 Windows 上不会是有效的路径。

string example2 = "@"C:\Users"";
Debug.WriteLine(example2); // Outputs @"C:Users"
// This throws an exception
var temp2 = new DirectoryInfo(example2);

换句话说:对于 C# 代码,使用 @"" 是可以的,但对于 JSON 对象,您需要将 JSON 文本更改为如下所示的内容,使用 转义字符,因此它是 JSON 反序列化程序完成字符串解析后的有效路径:

{
    "projectNumber":"16000",
    "projectName":"Sample Project",
    "Directory":"C:\Users",  
}

这显然是答案。非常感谢,阿农!让我失望的是字符串如何在消息框中显示我将如何在路径引用中使用它。新手错误!

最新更新