Im essayant de désérialiser les données que j'ai surmontées POST au format JSON mais ayant un problème.
Le message d'erreur est:
SerializationException: état attendu 'Élément' .. 'Texte' rencontré avec le nom '', espace de noms ''. System.Runtime.Serialization.XmlObjectSerializerReadContext.HandleMemberNotFound (XmlReaderDelegator xmlReader, ExtensionDataObject extensionData, int memberIndex)
Contrôleur où se produit la sérialisation:
public String RequestToken(string userData)
{
Contract.Ensures(Contract.Result<string>() != null);
UserModel deserializedUser = new UserModel();
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(userData));
ms.Position = 0;
DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
deserializedUser = ser.ReadObject(ms) as UserModel;
}
UserModel utilisé comme contrat:
using System;
using System.Runtime.Serialization;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace WishareIntegrationApi.Entities
{
[DataContract]
public class UserModel
{
[BsonId]
[BsonRepresentation(BsonType.String)]
[DataMember]
public ObjectId _id { get; set; }
[DataMember]
public string displayName { get; set; }
[DataMember]
public string photoURL { get; set; }
[DataMember]
public string email { get; set; }
[DataMember]
public int registeredAt { get; set; }
}
}
Et un exemple JSON que j'envoie par la poste:
{"_id":"8kmXH1fzSrVS8PqNLMwyhRH4hBw1","displayName":"Michal Takáč","photoURL":"https://lh3.googleusercontent.com/-xa5oE48RffQ/AAAAAAAAAAI/AAAAAAAACDE/OLrtV5-VIvw/photo.jpg","email":"[email protected]"}
Basculez vers JSON.Net.
Les API de sérialisation JSON ne font pas partie du noyau .Net et je ne m'attends pas à ce qu'elles le portent. Si vous avez utilisé des classes d'espaces de noms comme System.Web.Script.Serialization
passer à une autre sérialisation, en particulier les frameworks Microsfot basés sur le noyau .Net utilisent des sérialiseurs JSON.Net.
Comme mentionné par de nombreux utilisateurs dans les commentaires, je suis passé de l'ancienne méthode de sérialisation/désérialisation à l'aide de contrats à JSON.NET
Voici la bonne solution pour le contrôleur
public async Task<String> RequestToken(string userData)
{
var user = JsonConvert.DeserializeObject<UserModel>(userData);
}