公式の Mongo C# ドライバーと RestSharp を使用して、Json.NET で Rest Api を呼び出し、シリアライゼーション/デシリアライゼーションを実行しています。POST & GET したい次のような Person クラスがあるとします。
public class Person
{
[JsonProperty("_id"),JsonConverter(typeof(ObjectIdConverter))]
public ObjectId Id {get;set;}
public string Name {get;set;}
}
新しい Person オブジェクトを作成します。
var person = new Person{Id = ObjectId.GenerateId(),Name='Joe Bloggs'};
それを投稿すると、サーバー上で正しい次のように表示されます。
{ _id: 52498b56904ee108c99fbe88, name: 'Joe Bloggs'}
問題は、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));
}
}
どんな助けでも大歓迎です。