2016-07-20 10 views
0

herehere「/」は有効なxml文字です。
だから、私は以下のコントローラ/モデルWebAPI 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> 

私は何とか "パート1 /パート2" の代わりに "Part1_x002F_Part2" を取得することはできますが返されますがありますか?
オブジェクトをJSONとして要求した場合、期待通りに動作します。

答えて

2

/はエスケープしないテキストノードで発生する可能性があるという点で「有効な」XML文字です。 |

NameStartChar :: = ":":しかし/XML standardあたり、では有効ではありません| "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | | | [#x37F-#x1FFF] | [#x200C-#x200D] | | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

NameChar :: = NameStartChar | "-" | | | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

Name :: = NameStartChar (NameChar)*

/あなたが迷っている場合には、#x2Fあるので、あなたは、それがどの範囲に含まれていない見ることができます。彼らはXML名が が外部に使用されている文脈で区切り文字としてより有用です ので、Unicodeの記号文字のかなり大きな グループと一緒に、名前から除外され、

ASCII記号と句読点:これは意図的ですXML文書。このグループを指定すると、 は、は、はXML名の一部ではないことを保証します。

+0

最後の段落を除いて妥当な答えです。名前の先頭にあるコロンの制限は、ほとんどのパーサーが準拠するように選択したXML名前空間の仕様に現れます。私が知っている他の文字には、仕様や特定の実装において、同様の制限はありません。 –

+0

@MichaelKay:XML仕様には誤って解釈された段落が実際に含まれています。 * start *文字にコロンを含めるのはまだ意味がありませんが、ちょっと。私は段落を削除しました。無関係なものではありません。 –

+0

私はちょうどこれを言う必要があります:@ジョージ、私はこれをすべての朝に言っているが、あなたはそれが好きではなかった:) – Ares

関連する問題