C#将mongodb中的文档读入JSON并尝试获取值
我是JSON新手,所以这可能是一个简单的问题。我有下面的代码(下面还有一个json对象) 我只是希望能够读取JSON,并将其中的项目放入变量中,以便可读 我收到的错误是由于返回的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": {
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中有数百条记录,您知道它会对性能造成什么样的影响吗(我知道除了一个大概之外,还考虑了很多其他因素)