2016-07-20 6 views
0

I here und here lesen, daß '/' ein gültiges XML-Zeichen ist. So
, ich habe folgende Controller/ModelleWebAPI XML-Serialisierung mit Schrägstrich ("/") in Elementnamen

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; } 

    } 
} 

Die oben GET Aktionen gibt die folgende (xml)

<MyName xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Part1_x002F_Part2> 
     <Property1>222</Property1> 
    </Header_x002F_Footer> 
</MyName> 

Kann ich irgendwie "Teil1/Teil2" statt "Part1_x002F_Part2" bekommen?
Wenn ich das Objekt als JSON fordern, funktioniert es wie erwartet

Antwort

2

/ ist ein „gültig“ XML-Zeichen, indem sie in Textknoten ohne Flucht auftreten können. Aber / ist nicht gültig in Namen, pro der 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] |

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

Name :: = NameStartChar (NameChar)*

/ ist #x2F, falls Sie sich fragen, so dass Sie es nicht, die in jedem Bereich sehen. Das ist Absicht:

Die ASCII-Zeichen und Interpunktionszeichen, zusammen mit einer ziemlich großen Gruppe von Zeichen Unicode-Zeichen werden von Namen ausgeschlossen, weil sie nützlicher als Trennzeichen in Kontexten, wo XML-Name außerhalb verwendet werden, XML-Dokumente; diese Gruppe Bereitstellung gibt diesen Kontexten harte Garantien über das, was nicht Teil eines XML-Name sein.

+0

Gute Antwort mit Ausnahme des letzten Absatzes. Die Einschränkung für den Doppelpunkt am Anfang des Namens wird in der XML-Namespaces-Spezifikation angezeigt, der die meisten Parser entsprechen. Es gibt keine ähnlichen Einschränkungen für andere Zeichen, die mir bekannt sind, entweder in den Spezifikationen oder in bestimmten Implementierungen. –

+0

@MichaelKay: die XML-Spezifikation enthält tatsächlich einen Absatz über das, was ich falsch interpretiert habe - der Wortlaut ist leicht irreführend. Es macht immer noch keinen Sinn, den Doppelpunkt in das Zeichen * start * einzufügen, aber hey. Ich habe meinen Absatz entfernt, da es nicht mehr als eine Nebensache ist. –

+0

Ich muss nur sagen: @George, ich habe das alles Morgen gesagt, aber sie hat es nicht gefallen :) – Ares