根据使用场景的不同,字符串显示方式不同

问题描述:

使用正在加载到可观察集合中的JSON数据获取一些奇怪的行为。根据使用场景的不同,字符串显示方式不同

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

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

到目前为止,我已经能够使用加载到我的observablecollection后的预期数据。例如,消息框在消息框中显示(selectedfolder)如下:@“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", 
} 

这显然是答案。非常感谢,Anon!抛弃我的是字符串如何在一个消息框中显示,完全如何在路径引用中使用它。新手错误!