Ich habe einen C# WCF REST-Dienst, der das Hinzufügen eines Lesezeichens ermöglicht, indem eine HTTP-POST-Anforderung mit dem in XML serialisierten Lesezeichen gesendet wird. Ich habe den Vorgangsvertrag für den Dienst angegeben, der die XML-Datei abruft und das Objekt automatisch für mich deserialisiert. Mein Problem ist, dass die Deserialisierung nur funktioniert, wenn die XML-Elemente in der Anfrage in alphabetischer Reihenfolge angegeben sind und die Werte für alle Elemente, die nicht in der richtigen Reihenfolge sind, nicht aufgefüllt sind.Können WCF-REST-Services die Deserialisierung von XML-Nachrichten mit beliebiger Elementreihenfolge unterstützen?
This behaviour has been reported elsewhere.
Ich finde das ziemlich unbefriedigend; Ich halte die Anforderung, das XML in einer bestimmten Reihenfolge zu konstruieren, für unnötig und große Kopfschmerzen. Dies ist eine wichtige Anforderung, die allen Clients des Dienstes hinzugefügt werden muss, sowie eine Quelle potenziell schwieriger Debugprobleme.
Ist es möglich, WCF an XML-Element-Reihenfolge Agnostiker zu richten?
Einige weitere Details zum Zwecke Klarstellung:
sieht Mein Betrieb Vertrag wie folgt aus:
[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "/{username}/bookmarks", ResponseFormat = WebMessageFormat.Xml)]
public void PostBookmark(string username, RestBookmark newBookmark);
Die RestMessage wie folgt aussieht:
[DataContract(Name = "Bookmark", Namespace = "")]
public class RestBookmark
{
[DataMember]
public string BookmarkMd5 { get; set; }
[DataMember]
public string Url { get; set; }
[DataMember]
public string UserName { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; set; }
}
Wenn ich die folgende XML-Nachricht zu senden, dann wird nur die Username-Eigenschaft des RestMessage Objekt wird aufgefüllt, wenn PostBookmark() aufgerufen wird:
<?xml version="1.0"?><Bookmark><UserName>nick.street</UserName><Url>http://www.stackoverflow.com</Url><BookmarkMd5>f184eb3347cf94f6ce5f5fc2844e3bdd</BookmarkMd5><Description>Developer Forum</Description><Title>Stack Overflow</Title></Bookmark>
Ich mag die Idee, den XMLSerializer zu verwenden. –
Danke für die Hilfe und klare Antwort! –