Tôi đang sử dụng trình điều khiển chính thức của Mongo C# và RestSharp để gọi Rest Api với Json.NET để thực hiện tuần tự hóa/deserialization của tôi. Nói rằng tôi có một lớp người như sau, mà tôi muốn đăng & GET:Json.NET deserializing Mongo ObjectId đang đưa ra kết quả sai
public class Person
{
[JsonProperty("_id"),JsonConverter(typeof(ObjectIdConverter))]
public ObjectId Id {get;set;}
public string Name {get;set;}
}
tôi tạo ra một đối tượng Person mới:
var person = new Person{Id = ObjectId.GenerateId(),Name='Joe Bloggs'};
POST nó, và trên máy chủ tôi thấy sau đó là chính xác:
{ _id: 52498b56904ee108c99fbe88, name: 'Joe Bloggs'}
vấn đề, là khi tôi thực hiện một lấy ObjectId tôi nhận được trên máy khách là {0000000000000 ...} tức là không phải là {5249 .....} tôi muốn expe ct. Phản hồi thô cho thấy giá trị chính xác, nhưng một khi tôi deserialize tôi mất nó.
Mã ObjectIdConverter là:
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));
}
}
Bất kỳ trợ giúp sẽ được đánh giá cao.
Ahhhh có ý nghĩa !!! Cảm ơn Brian, câu trả lời hay! –