首页 > 解决方案 > 无法获取数据到对象

问题描述

我正在尝试从 mongodb 获取 json 数据,将其放入一个类 objec 中,然后将一个参数打印到控制台,但我收到此错误:

Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: O. Path '_id', line 1, position 10.'

我的 json 看起来像这样:

{ "_id" : ObjectId("5d72b79c58011725b8b31b10"), "length" : NumberLong(957608), "
chunkSize" : 64512, "uploadDate" : ISODate("2019-09-06T19:46:42.058Z"), "md5" :
"3965979118e1302a7d19f609f38ede3e", "filename" : "C:\\Users\\kbu\\Downloads\\hve
m-er-vi.jpg", "metadata" : { "Beloeb" : "", "Overskrift" : "", "Gruppe" : "", "B
eskrivelse" : "", "Dato" : "6. september 2019", "Afsender" : "Lars" } }

我怀疑,这与我的班级有关,但我不知道是什么。

这是我的代码:

    class Program
    {
        static void Main(string[] args)
        {
            var client = new MongoClient("mongodb+srv://*********:*********@kbucluster-oslh9.mongodb.net/test?retryWrites=true&w=majority");
            var database = client.GetDatabase("test");
            var collec = database.GetCollection<BsonDocument>("fs.files");

            var filter = Builders<BsonDocument>.Filter.Empty;
            var result = collec.Find(filter).ToList();

            foreach(var doc in result)
            {
                Console.WriteLine(doc.ToJson());

                RootObject bilag = JsonConvert.DeserializeObject<RootObject>(doc.ToJson());

                Console.WriteLine(bilag.ID);
            }
            Console.ReadKey();
        }
    }

    public class Metadata
    {
        public string Beloeb { get; set; }
        public string Overskrift { get; set; }
        public string Gruppe { get; set; }
        public string Beskrivelse { get; set; }
        public string Dato { get; set; }
        public string Afsender { get; set; }
    }
    public class RootObject
    {
        public string ID { get; set; }
        public string Length { get; set; }
        public string ChunkSize { get; set; }
        public string UploadDate { get; set; }
        public string MD5 { get; set; }
        public string Filename { get; set; }
        public Metadata Metadata { get; set; }
    }
}

标签: c#jsonmongodb

解决方案


您可以使用以下方法

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);

推荐阅读