Mic*_*káč 6 c# serialization json .net-core datacontractjsonserializer
我试图反序列化我已经通过JSON格式POST但有一些问题的数据.
错误消息是:
SerializationException:期望状态'Element'..遇到名为'',namespace''的'Text'.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;
}
Run Code Online (Sandbox Code Playgroud)
用作合同的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; }
}
}
Run Code Online (Sandbox Code Playgroud)
我发帖子的一个例子JSON:
{"_id":"8kmXH1fzSrVS8PqNLMwyhRH4hBw1","displayName":"Michal Taká?","photoURL":"https://lh3.googleusercontent.com/-xa5oE48RffQ/AAAAAAAAAAI/AAAAAAAACDE/OLrtV5-VIvw/photo.jpg","email":"email.takac@gmail.com"}
Run Code Online (Sandbox Code Playgroud)
Mic*_*káč 10
切换到JSON.Net.
JSON序列化API不是.Net核心的一部分,我不希望它们移植它.如果您使用来自命名空间的类(如System.Web.Script.Serialization切换到其他序列化),特别是基于.Net核心的Microsfot框架使用JSON.Net序列化程序.
正如许多用户在评论中提到的那样,我已经从使用契约进行序列化/反序列化的旧方法切换到JSON.NET
这是控制器的正确解决方案
public async Task<String> RequestToken(string userData)
{
var user = JsonConvert.DeserializeObject<UserModel>(userData);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9597 次 |
| 最近记录: |