Ne peut pas désérialiser des données XML dans WCF service REST
J'ai juste commencé à jouer avec le RESTE de kit de démarreur, et j'ai frappé un barrage routier à essayer de construire mon propre service. Je suis en train de créer un service de gestion de compte, et je ne peux pas obtenir le service de sérialiser les objets, en jetant le message d'erreur suivant:
Incapable de désérialiser corps XML avec le nom de la racine 'CreateAccount" et de la racine de l'espace de noms "(pour l'opération "CreateAccount' et contrat ('Service', 'http://tempuri.org/')) à l'aide de DataContractSerializer. S'assurer que le type correspondant à l'XML est ajouté à des types connus de la collection du service.
Voici le code actuel pour le service (basé sur de l' 'DoWork" méthode qui est venu avec le projet):
[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
};
}
}
Et le dernier, mais non le moindre, voici l'objet qui est la cause de tous les problèmes:
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; }
}
Ai-je raté quelque chose de stupide?
Merci d'avance!
Vous devez vous connecter pour publier un commentaire.
Il semble que le problème est un espace de confrontation entre votre nom de méthode "CreateAccount" et votre type d'entrée "CreateAccount".
Aussi, vous devez marquer votre CreateAccount type DataContract comme suit:
Si vous voulez garder le même nom, vous pouvez spécifier un espace de noms pour le CreateAccount classe.
J'ai remarqué que vous avez un type de retour ainsi. S'assurer que le type de retour est marqué par la DataContract attribut ainsi. Aussi, spécifiez le format de retour comme suit:
Il s'avère que j'ai été absent une valeur supplémentaire dans le
[DataContract]
l'attribut de l'objet métier.Devrait être
[DataContract(Namespace = "")]
Si vous ne l'avez pas déjà, je pense que [DataContract] attribut au-dessus de votre CreatAccount classe.
J'ai eu un problème similaire, mais j'ai eu la DataContract attribut. Ce qui me manquait, mais a été l'xmlns="http://uri.org" attribut de l'élément racine lorsque vous essayez de lire le fichier xml de retour dans l'objet.
par exemple,