【发布时间】:2018-06-13 00:19:32
【问题描述】:
我正在尝试以 JSON 格式反序列化通过 POST 获得的数据,但遇到了一些问题。
错误信息是:
SerializationException:期待状态“元素”。遇到名称为“”、命名空间“”的“文本”。 System.Runtime.Serialization.XmlObjectSerializerReadContext.HandleMemberNotFound(XmlReaderDelegator xmlReader, ExtensionDataObject extensionData, int memberIndex)
发生序列化的控制器:
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:
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; }
}
}
还有一个我通过帖子发送的 JSON 示例:
{"_id":"8kmXH1fzSrVS8PqNLMwyhRH4hBw1","displayName":"Michal Takáč","photoURL":"https://lh3.googleusercontent.com/-xa5oE48RffQ/AAAAAAAAAAI/AAAAAAAACDE/OLrtV5-VIvw/photo.jpg","email":"email.takac@gmail.com"}
【问题讨论】:
-
"System.Runtime.Serialization.Xml"... 在错误中。唔。检查您的默认序列化程序。
-
为什么要使用已弃用的 DataContractJsonSerializer? .NET 本身在 ASP.NET Web API 中使用 JSON.NET。 .NET Core 在 ASP.NET MVC 和 Web API 中都使用 Json.NET。通过使用 DataContractJsonSerializer 您正在引入对遗留类的依赖
-
我也注意到了这个,但我对 .NET 完全陌生。你能详细说明一下默认的序列化程序吗?
-
@MichalTakáč 忘记默认序列化程序并使用 JSON.NET。一个简单的 JSonConvert.DeserializeObject
(userData)` 就足够了 -
我刚刚切换到 JSON.NET,它运行良好。谢谢你的帮助:)
标签: c# json serialization .net-core datacontractjsonserializer