无法将数据获取到对象

时间:2019-09-11 22:22:28

标签: c# json mongodb

我正在尝试从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; }
    }
}

4 个答案:

答案 0 :(得分:0)

您的JSON中没有函数

"_id" :ObjectId("5d72b79c58011725b8b31b10"), "length" : NumberLong(957608),"uploadDate" : ISODate("2019-09-06T19:46:42.058Z")
Parse error on line 1:
{ "_id" : ObjectId("5d72b79c58
----------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'

答案 1 :(得分:0)

1-值_id错误的键:“ json中的ObjectId方法是什么?”

两个错误的名称_id:因为在RootObject类中,属性为ID

3-您必须用括号将ObjectIdNumberLongISODate删除

{ "ID" : "5d72b79c58011725b8b31b10", "Length" : "957608", "
ChunkSize" : "64512", "UploadDate" : "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" } }

答案 2 :(得分:0)

如果您像这样匹配RootObject的属性名称/类型,则不需要json.net:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
using System;

namespace StackOverflow
{
    public class Program
    {
        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
        {
            [BsonId] // need to add this
            public ObjectId ID { get; set; }
            public int length { get; set; }
            public double chunkSize { get; set; }
            public DateTime uploadDate { get; set; }
            public string md5 { get; set; }
            public string filename { get; set; }
            public Metadata metadata { get; set; }
        }

        private static void Main(string[] args)
        {
            var collection = new MongoClient("mongodb://localhost")
                                    .GetDatabase("test")
                                    .GetCollection<RootObject>("fs.files");

            var result = collection.Find(Builders<RootObject>.Filter.Empty).ToList();

            foreach (var doc in result)
            {
                Console.WriteLine(doc.ToJson());
                Console.WriteLine("");
                Console.WriteLine(doc.ID.ToString());
                Console.Read();
            }
        }
    }
}

答案 3 :(得分:0)

您可以使用以下方法

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);
相关问题