我正在使用JSON.NET库将C#list转换为JSON。在我查看快速观察时转换对象后,我可以看到每个属性的额外'\'。我通过控制器(asp.net MVC控制器)将此数据发送到JavaScript客户端之一。发送数据时,数据有额外的'\'。如何删除这些额外的'\'?
我的控制员:
public class MyController : myBase
{
public string Get(string id = null, string userName = null)
{
List<Data> dataList = new List<Data>();
Data d = new Data();
d.Name = "FireFox";
d.Folder = @"Testing\Mac OSX";
dataList.Add(d);
d = new Data();
d.Name = "Safari";
d.Folder = @"Testing\Mac OSX";
dataList.Add(d);
d = new Data();
d.Name = "Chrome";
d.Folder = @"Testing\Mac OSX";
dataList.Add(d);
d = new Data();
d.Name = "FireFox";
d.Folder = @"Testing\Windows";
dataList.Add(d);
d = new Data();
d.Name = "Safari";
d.Folder = @"Testing\Windows";
dataList.Add(d);
d = new Data();
d.Name = "Chrome";
d.Folder = @"Testing\Windows";
dataList.Add(d);
d = new Data();
d.Name = "Internet Exploder";
d.Folder = @"Testing\Windows";
dataList.Add(d);
d = new Data();
d.Name = "Chrome";
d.Folder = @"Testing\Linux";
dataList.Add(d);
d = new Data();
d.Name = "Firefox";
d.Folder = @"Testing\Linux";
dataList.Add(d);
d = new Data();
d.Name = "Testing First Child";
d.Folder = @"Testing";
dataList.Add(d);
d = new Data();
d.Name = "First Child";
d.Folder = null;
dataList.Add(d);
Node root = new Node();
foreach (Data da in dataList)
{
Node parent = root;
if (!string.IsNullOrEmpty(da.Folder))
{
Node child = null;
foreach (string part in da.Folder.Split(new char[] {'\\'}, StringSplitOptions.RemoveEmptyEntries))
{
string name = part.Trim();
child = parent.children.Find(n => n.Name == name);
if (child == null)
{
child = new Node {Name = name};
parent.children.Add(child);
}
parent = child;
}
}
//Always adds the leaf node.
parent.children.Add(new Node {Name = da.Name});
}
string output = JsonConvert.SerializeObject(root);
return output;
}
}
public class Data
{
public string Name { get; set; }
public string Folder { get; set; }
}
class Node
{
public Node()
{
children = new List<Node>();
}
public List<Node> children { get; set; }
public string Name { get; set; }
public bool leaf { get; set; }
public bool expanded { get; set; }
}
firefox中的数据---其他控制器返回的数据没有'\'
额外'\'
如何删除这些'\'?
答案 0 :(得分:3)
ASP.Net Web API应该为您进行JSON转换,因此您不需要将返回对象转换为字符串并将其返回。您只需将要发送回的对象作为JSON返回(在本例中为root
)。然后你的方法就变成了:
public Node Get(string id = null, string userName = null)
正如Chris W所提到的,您的客户端调用代码需要设置内容类型,或者接受头字段为“application / json”,以便MVC Web API知道以JSON格式发送数据。
答案 1 :(得分:3)
您正在使用JSON序列化对象,然后您将通过该方法返回此字符串 - 现在它是对象的字符串表示形式。然后,JSON Web服务API接受此字符串,并对其进行编码以确保它是有效的JS字符串 - 因此可以转义所有引号。
基本上,你正在进行双重编码。而不是字符串,直接返回根对象,一切都会很好:)
答案 2 :(得分:0)
当您调用JsonConvert.SerializeObject时,您会从控制器返回一个字符串 - 这会导致转义引号,因为内容类型不是“application / json”。
如果你需要在发送Json数据之前做额外的处理,你能否使用JsonResult或继承JsonResult?
如果无法做到这一点,则需要替换客户端上的转义字符。
答案 3 :(得分:-1)
您可以在javascript上申请:
yourStringJSON.replace(/\\\\/g, "\\");
这应该将“\\”转换为“\”