我看了here和here,'/'是有效的xml字符 所以,我有以下控制器/模型
using System.Runtime.Serialization;
using System.Web.Http;
namespace WebApplication1.Controllers
{
public class ValuesController : ApiController
{
public Parent Get()
{
return new Parent() { Child = new Child() { Property1 = "222" } };
}
}
[DataContract(Name = "MyName", Namespace = "")]
public class Parent
{
[DataMember(Name = "Header/Footer", EmitDefaultValue = true)]
public Child Child { get; set; }
}
[DataContract(Name = "MyName", Namespace = "")]
public class Child
{
[DataMember(Name = "Property1", EmitDefaultValue = true)]
public string Property1 { get; set; }
}
}
上述GET操作返回以下(xml)
<MyName xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Part1_x002F_Part2>
<Property1>222</Property1>
</Header_x002F_Footer>
</MyName>
我可以以某种方式获得“Part1 / Part2”而不是“Part1_x002F_Part2”吗? 如果我将对象请求为JSON,它将按预期工作
答案 0 :(得分:2)
/
是一个“有效”的XML字符,因为它可能出现在文本节点中而不会转义。但根据XML standard,/
在名称中无效:
NameStartChar
:: =":"
|[A-Z]
|"_"
|[a-z]
|[#xC0-#xD6]
|[#xD8-#xF6]
|[#xF8-#x2FF]
|[#x370-#x37D]
|[#x37F-#x1FFF]
|[#x200C-#x200D]
|[#x2070-#x218F]
|[#x2C00-#x2FEF]
|[#x3001-#xD7FF]
|[#xF900-#xFDCF]
|[#xFDF0-#xFFFD]
|[#x10000-#xEFFFF]
NameChar
:: =NameStartChar
|"-"
|"."
|[0-9]
|#xB7
|[#x0300-#x036F]
|[#x203F-#x2040]
Name
:: =NameStartChar (NameChar)*
/
是#x2F
,如果您想知道,那么您可以看到它未包含在任何范围内。这是故意的:
ASCII符号和标点符号,以及相当大的 Unicode符号字符组,从名称中排除,因为 它们在XML名称的上下文中作为分隔符更有用 在XML文档之外使用;提供这个组给出了这些背景 关于不能成为XML名称的一部分的硬性保证。