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));
}
}
}
I'm stuck I've tried half a dozen methods, I'm still getting the same error with json reader, any ideas anyone?
Last tried this from SO *
JsonReader Exception
Unexpected character encountered while parsing value: O. Path '_id', line 1, position 10.
The JSON string looks like this:
{
"_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. "
}
You are getting this error because the value for the _id
property does not conform to the JSON standard (see JSON.org ). JSON values must be one of the following:
"
){
and }
)[
and ]
)true
, false
, or null
The value ObjectId("5378f94a3513fa3374be7e20")
appears to be a function, which is not valid. The value ISODate("2014-05-18T18:17:46.983Z")
has the same problem. You will need to somehow change your JSON to meet the standard if you want to parse it using JSON.net.
The problem is that the MongoDB Bson Seralization output doesn't convert the objects to the plain Json expected for Json.Net. Fortunately, is possible to convert to BsonDocument to .Net object and then Serialize that object to 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);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.