[英]Mongo DB object Id deserializing using JSON serializer
var docToJson = doc.ToJson<BsonDocument>();
story Featured = JsonConvert.DeserializeObject<story>(docToJson);
public class story
{
[JsonProperty("_id"), JsonConverter(typeof(ObjectIdConverter))]
public ObjectId Id { get; set; }
....
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)
{
JToken token = JToken.Load(reader);
return new ObjectId(token.ToObject<string>());
}
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(ObjectId));
}
}
}
我被卡住了,我已经尝试了六种方法,但使用 json 阅读器时仍然出现相同的错误,有人有任何想法吗?
上次尝试从SO *
JsonReader 异常
解析值时遇到意外字符:O。路径“_id”,第 1 行,位置 10。
JSON 字符串如下所示:
{
"_id": ObjectId("5378f94a3513fa3374be7e20"),
"cc": "GB",
"userName": "xyz ",
"userImage": "img/16.jpg",
"createdDate": ISODate("2014-05-18T18:17:46.983Z"),
"Headling": "Veniam, amet, incidunt veniam, ipsam nostrud natus exercitationem consectetur, eos dolorem. ",
"subheading": "Veniam, amet, incidunt veniam, ipsam nostrud. "
}
您收到此错误是因为_id
属性的值不符合 JSON 标准(请参阅JSON.org )。 JSON 值必须是以下值之一:
"
开头和结尾){
和}
开头和结尾)[
和]
开头和结尾)true
、 false
或null
值ObjectId("5378f94a3513fa3374be7e20")
似乎是一个无效的函数。 值ISODate("2014-05-18T18:17:46.983Z")
也有同样的问题。 如果您想使用 JSON.net 解析它,您将需要以某种方式更改您的 JSON 以符合标准。
问题是 MongoDB Bson 序列化输出不会将对象转换为 Json.Net 预期的普通 Json。 幸运的是,可以将 BsonDocument 转换为 .Net 对象,然后将该对象序列化为 Json。
object dotnetObject = BsonTypeMapper.MapToDotNetValue(bsonDocument);
// Json mapped to default .Net objects
string json = Newtonsoft.Json.JsonConvert.SerializeObject(dotnetObject);
// Parsing as JObject
var jobject = JObject.Parse(json);
// Deserializing as your custom Type
var myObject = JsonConvert.DeserializeObject<MyType>(json);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.