Nicht Deserialisieren von XML in WCF REST service
Ich habe gerade angefangen zu spielen mit dem REST starter kit, und den ich getroffen habe, eine Straßensperre zu bauen versuchen meinen eigenen service. Ich bin versucht, einen Dienst zu erstellen für account management, und ich kann nicht den service zu serialisieren, die meine Objekte, die werfen die folgende Fehlermeldung:
Nicht Deserialisieren von XML Körper mit root-name 'CreateAccount' und root-namespace " (für den Betrieb 'CreateAccount' und Vertrag ('Service', 'http://tempuri.org/')) mit DataContractSerializer. Sicherstellen, dass die Art entsprechend der XML-Code Hinzugefügt, um die bekannten Typen-Sammlung des Dienstes.
Hier ist der eigentliche code für den service (auf der Grundlage der " DoWork-Methode, die kam mit dem Projekt):
[WebHelp(Comment = "Creates a Membership account")]
[WebInvoke(UriTemplate = "CreateAccount", RequestFormat = WebMessageFormat.Xml)]
[OperationContract]
public ServiceResponse CreateAccount(CreateAccount request)
{
try
{
//do stuff
return new ServiceResponse()
{
Status = "SUCCESS",
ErrorMessage = ""
};
}
catch (Exception ex)
{
return new ServiceResponse()
{
Status = "ERROR",
ErrorMessage = ex.Message + "\n\n" + ex.StackTrace
};
}
}
Und last, but not least, hier ist das Objekt, das die Ursache für die Probleme:
public class CreateAccount
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public bool SignUpForNewsletter { get; set; }
public string Password { get; set; }
}
Bin ich etwas dumm?
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint das problem ist ein namespace clash zwischen Ihre Methode Namen "CreateAccount" und Ihr input type "CreateAccount".
Darüber hinaus müssen Sie markieren Sie Ihre CreateAccount-Typ als DataContract-wie so:
Wenn Sie möchten, halten die gleichen Namen, Sie können geben Sie einen namespace für die CreateAccount Klasse.
Ich bemerkte, haben Sie den Rückgabetyp als gut. Die Rückgabe-Typ ist gekennzeichnet mit dem DataContract-Attribut als auch. Geben Sie außerdem die Rückkehr format etwa so:
Es stellt sich heraus, dass ich fehlte, einen zusätzlichen Wert in der
[DataContract]
Attribut des business Objekts.Sollte
[DataContract(Namespace = "")]
Wenn Sie nicht bereits haben, ich denke, einen [DataContract] Attribut über Ihre CreatAccount Klasse.
Ich hatte ein ähnliches problem, aber ich hatte das DataContract-Attribut. Was mir fehlte war jedoch die xmlns="http://uri.org" Attributs aus dem root-element wenn Sie versuchen zu Lesen, die xml wieder in das Objekt ein.
z.B.