Cli*_*ead 5 c# serialization json json.net mongodb
我正在使用官方的Mongo C#Driver和RestSharp用Json.NET调用Rest Api来执行序列化/反序列化.假设我有一个Person类,如下所示,我想POST&GET:
public class Person
{
[JsonProperty("_id"),JsonConverter(typeof(ObjectIdConverter))]
public ObjectId Id {get;set;}
public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我创建一个新的Person对象:
var person = new Person{Id = ObjectId.GenerateId(),Name='Joe Bloggs'};
Run Code Online (Sandbox Code Playgroud)
POST它,在服务器上我看到以下是正确的:
{ _id: 52498b56904ee108c99fbe88, name: 'Joe Bloggs'}
Run Code Online (Sandbox Code Playgroud)
问题是,当我执行GET时,我在客户端上获得的ObjectId是{0000000000000 ...},即不是{5249 .....}我期望的.原始响应显示正确的值,但一旦我反序列化我松开它.
ObjectIdConverter代码是:
public class ObjectIdConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value.ToString());
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var objectId = (ObjectId)existingValue; // at this point existingValue is {000...}
return objectId;
}
public override bool CanConvert(Type objectType)
{
return (objectType == typeof (ObjectId));
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
您执行ReadJson的转换器方法不正确。该existingValue参数不会为您提供从JSON读取的反序列化值,它会为您提供将要替换的对象的现有值。在大多数情况下,该值为null或为空。您需要做的是使用reader从JSON获取值,根据需要对其进行转换,然后返回转换后的值。
假设您的ObjectId类具有一个接受十六进制字符串的构造函数,则这是实现该ReadJson方法的方式:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
return new ObjectId(token.ToObject<string>());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2729 次 |
| 最近记录: |