C#将mongodb中的文档读入JSON并尝试获取值

C#将mongodb中的文档读入JSON并尝试获取值,c#,json,mongodb,parsing,C#,Json,Mongodb,Parsing,我是JSON新手,所以这可能是一个简单的问题。我有下面的代码(下面还有一个json对象) 我只是希望能够读取JSON,并将其中的项目放入变量中,以便可读 我收到的错误是由于返回的JSON对象中的文本ObjectID(“”): 解析值时遇到意外字符:O.路径“\u id”,第1行,位置10。 从MONGO返回的JSON对象: { "_id": ObjectId("543c2d426b6b5ef78b62fc41"), "LoanStatusAddedEvent": {

我是JSON新手,所以这可能是一个简单的问题。我有下面的代码(下面还有一个json对象)

我只是希望能够读取JSON,并将其中的项目放入变量中,以便可读

我收到的错误是由于返回的JSON对象中的文本
ObjectID(“”
):
解析值时遇到意外字符:O.路径“\u id”,第1行,位置10。

从MONGO返回的JSON对象:

{
    "_id": ObjectId("543c2d426b6b5ef78b62fc41"),
    "LoanStatusAddedEvent": {
        "@From": "Lakewood",
        "@MessageTimeDateStamp": "2013-08-12T05:03:23.035-04:00",
        "@MessageID": "29055040",
        "LoanNumber": "5300494930",
        "CurrentIndicator": "true",
        "StatusChangeDate": "2013-08-11T20:01:01.000",
        "StatusValue": "42",
        "StatusType": "Active"
    }
}
代码:

        // connect to the mongo server and the Mongos DB
        string connectionString = "connectionstringhere";


        MongoServer mongo = MongoServer.Create(connectionString);
        mongo.Connect();

        MongoDatabase database = mongo.GetDatabase("Mangos");


        //Builds new Collection (looking at JsonImports on server)
        MongoCollection<LoanStatus> collection2 = database.GetCollection<LoanStatus>("JsonImports");


        var collection = database.GetCollection<BsonDocument>("JsonImports");


        var query = new QueryDocument(); //("LoanNumber", "5300494930");


        foreach (BsonDocument item in collection.Find(query))
        {
            string json = item.ToJson();

            Console.WriteLine(item);


            // code here to below http://james.newtonking.com/json/help/index.html?topic=html/QueryingLINQtoJSON.htm
            JObject rss = JObject.Parse(json);

            string rssLoanNumber = (string)rss["LoanStatusAddedEvent"]["LoanNumber"];

            Console.WriteLine(rssLoanNumber);



        }// end for each loop


        Console.WriteLine();
        Console.Read();


public class LoanStatus
{
    public string From { get; set; }

    public string MessageTimeDateStamp { get; set; }

    public string MessageID { get; set; }

    public string LoanNumber { get; set; }

    public string CurrentIndicator { get; set; }

    public string StatusChangeDate { get; set; }

    public string StatusValue { get; set; }

    public string StatusType { get; set; }

    //public string id { get; set; }



    public void PrintDetailsToScreen()
    {
        Console.WriteLine(String.Format("{0}{1}{2}",
                            this.LoanNumber, this.StatusChangeDate, this.StatusValue));
    }

}

public class RootObject
{
    public LoanStatus LoanStatus { get; set; }
}
//连接到mongo服务器和Mongos数据库
string connectionString=“connectionstringher”;
MongoServer mongo=MongoServer.Create(connectionString);
mongo.Connect();
MongoDatabase=mongo.GetDatabase(“芒果”);
//构建新集合(查看服务器上的JsonImports)
MongoCollection collection2=database.GetCollection(“JsonImports”);
var collection=database.GetCollection(“JsonImports”);
var query=new QueryDocument()//(“贷款编号”,“5300494930”);
foreach(collection.Find(查询)中的BsonDocument项)
{
字符串json=item.ToJson();
控制台写入线(项目);
//从这里到下面的代码http://james.newtonking.com/json/help/index.html?topic=html/QueryingLINQtoJSON.htm
JObject rss=JObject.Parse(json);
字符串rssLoanNumber=(字符串)rss[“LoanStatusAddedEvent”][“LoanNumber”];
控制台写入线(rssLoanNumber);
}//每个循环结束
Console.WriteLine();
Console.Read();
公共类贷款状态
{
来自{get;set;}的公共字符串
公共字符串MessageTimeDateStamp{get;set;}
公共字符串MessageID{get;set;}
公共字符串LoanNumber{get;set;}
公共字符串CurrentIndicator{get;set;}
公共字符串StatusChangeDate{get;set;}
公共字符串状态值{get;set;}
公共字符串状态类型{get;set;}
//公共字符串id{get;set;}
public void PrintDetailsToScreen()
{
Console.WriteLine(String.Format(“{0}{1}{2}”),
this.loannnumber、this.StatusChangeDate、this.StatusValue));
}
}
公共类根对象
{
公共LoanStatus LoanStatus{get;set;}
}

您的对象应该有一个名为
\u id
id
类型为
ObjectId
字段或
属性

public ObjectId Id { get; set; }
如果可以重新构建mongo数据库,则可以将
Id
的类型更改为
String
,而不是
ObjectId
并告诉mongo驱动程序按字符串处理所有id

BsonSerializer.RegisterIdGenerator(typeof(string), new StringObjectIdGenerator());
如果这样做,您可以将任何
字符串
用作
Id
,如果为空,MongoDb将为您的文档创建一个随机
Id

  • 更新:
Mongodb文档不是有效的Json文档。它有一些无法用json.net解析的值。 您应该手动删除它们。这有一个简单的代码

var json = "ObjectId(\"123\")";
var result =  Regex.Match(json, @"ObjectId\(([^\)]*)\)").Value;
var id = result.Replace("ObjectId(", string.Empty).Replace(")", String.Empty);
var validJson = json.Replace(result, id);

将记录插入数据库时自动生成objectId。以下是导入Mongo之前的JSON:{“LoanStatusAddedEvent:{“@From:“Lakewood”,“@MessageTimeDateStamp:“2013-08-12T05:03:24.602-04:00”,“@MessageID:“29056324”,“LoannNumber:“4699880107”,“CurrentIndicator:“true”,“StatusChangeDate:“2013-08-12T00:36:23.000”,“StatusValue:“45”,“StatusType:“Active”}Mongo Json不是Json.net理解的标准Json。字符串Id可以解决问题,但可能不是您想要的方式。我不需要或不关心Id字段(至少在结果中是这样),所以有没有办法忽略它并使其作为JSON对象工作?或者以其他方式从MongoDB解析出记录,而不是JSON。我不必使用JSON来解析它。您可以手动将ObjectID(“…”)替换为“…”和Regex。var json=“ObjectId(\“123\”);var result=Regex.Match(json,@“ObjectId([^)]*)”).Value;var id=result.Replace(“ObjectId(,string.Empty)。Replace(“)”,string.Empty);var validJson=json.Replace(结果,id);我想做类似的事情(replace函数),但是我可以返回数百个结果(虽然不是大部分时间),并且不确定对性能的影响,但是我只是想做一个字符串替换,正则表达式会快得多。假设上面的示例JSON中有数百条记录,您知道它会对性能造成什么样的影响吗(我知道除了一个大概之外,还考虑了很多其他因素)