- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直致力于此,并设法将 json 解析为 C# 对象。现在下一步是将一个 json 数组解析为一个列表。我已经设法完成了工作,但我很确定有更好的方法可以将 BsonArray 转换为 List
using (StreamReader file = File.OpenText(filename))
{
try
{
//first up convert to bson
var jsonSampleData = file.ReadToEnd();
//var bsonSampleData = BsonDocument.Parse(jsonSampleData);
//this would be for a single BSOnDocument
var bsonSampleData = BsonSerializer.Deserialize<BsonArray>(jsonSampleData);
var x = bsonSampleData.ToList();
List<ThePlan> lst = new List<ThePlan>();
foreach (var doc in x)
{
var t = BsonSerializer.Deserialize<ThePlan>(doc.AsBsonDocument);
lst.Add(t);
}
}
catch (Exception ex)
{
throw;
}
编辑-附加信息
要清楚我需要完成的是获取给定的 json 文档并将其重新水合到 List。由于我是 mongo 的新手,而且 T 是 mongo 实体表示,这变得更加复杂。
正如 Andrei 指出的那样,它工作正常:
using (StreamReader file = File.OpenText(filename))
{
var jsonSampleData = file.ReadToEnd();
_thePlan = BsonSerializer.Deserialize<List<ThePlan>>(jsonSampleData);
}
想想我昨天的挣扎,我认为这实际上与我的 json 有关,在我早期的尝试中它看起来像这样:
{
"_id": "57509afbc6b48d3f33b2dfcd",
...
}
在弄清楚这一切的过程中,我的 json 成熟到:
{
"_id": { "$oid": "57509afbc6b48d3f33b2dfcd" },
.....
}
我在使用 BsonSerializer 时遇到的麻烦很可能是我的错误 json,一旦解决了这个问题,我就不够机智,无法返回 BsonSerielizer 再试一次。
最佳答案
要么一直使用强类型,要么根本不使用类型。
强类型
假设这些是您的类型:
public class BaseObject {
[BsonId] public ObjectId id { get; set; }
[BsonElement("plans")] public List<ThePlan> Plans { get; set; }
}
public class ThePlan {
[BsonElement("i")] public int Integer { get; set; }
[BsonElement("s")] public string String { get; set; }
}
和这些测试实用程序:
void ToJsonTyped(BaseObject bo)
{
var sb = new StringBuilder();
using (TextWriter tw = new StringWriter(sb))
using (BsonWriter bw = new JsonWriter(tw))
{
BsonSerializer.Serialize<BaseObject>(bw, bo);
}
string jsonObject = sb.ToString();
BaseObject bo2 = BsonSerializer.Deserialize<BaseObject>(jsonObject);
Assert.AreEqual(bo, bo2);
}
void ToBsonTyped(BaseObject bo)
{
byte[] bsonObject = null;
using (var ms = new MemoryStream())
using (BsonWriter bw = new BsonBinaryWriter(ms))
{
BsonSerializer.Serialize<BaseObject>(bw, bo);
bsonObject = ms.ToArray();
}
BaseObject bo1 = BsonSerializer.Deserialize<BaseObject>(bsonObject);
Assert.AreEqual (bo, bo1);
}
你可以测试:
BaseObject bo = new BaseObject() {
Plans = new List<ThePlan>() {
new ThePlan() {Integer=1, String="one" },
new ThePlan() {Integer=2, String="two" },
new ThePlan() {Integer=3, String="three" } } };
ToBsonTyped(bo);
ToJsonTyped(bo);
根本没有输入,BsonDocument
和 BsonArray
的组合
测试:
BsonDocument doc = new BsonDocument();
var bsonArray = new BsonArray();
bsonArray.Add(new BsonDocument("one", 1));
bsonArray.Add(new BsonDocument("two", 2));
bsonArray.Add(new BsonDocument("three", 3));
doc.Add( new BsonElement("plans", bsonArray));
ToBsonUnTyped(doc);
ToJsonUnTyped(doc);
测试工具:
void ToBsonUnTyped(BsonDocument doc) {
byte[] bsonObject = null;
using (var ms = new MemoryStream())
using (BsonWriter bw = new BsonBinaryWriter(ms))
{
BsonSerializer.Serialize<BsonDocument>(bw, doc);
bsonObject = ms.ToArray();
}
BsonDocument docActual = BsonSerializer.Deserialize<BsonDocument>(bsonObject);
Assert.AreEqual (doc, docActual);
}
void ToJsonUnTyped(BsonDocument doc)
{
var sb = new StringBuilder();
using (TextWriter tw = new StringWriter(sb))
using (BsonWriter bw = new JsonWriter(tw))
{
BsonSerializer.Serialize<BsonDocument>(bw, doc);
}
string jsonObject = sb.ToString();
BsonDocument doc2 = BsonSerializer.Deserialize<BsonDocument>(jsonObject);
Assert.AreEqual(doc, doc2);
}
关于c# - 将 BsonArray 转换为 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37932496/
我一直致力于此,并设法将 json 解析为 C# 对象。现在下一步是将一个 json 数组解析为一个列表。我已经设法完成了工作,但我很确定有更好的方法可以将 BsonArray 转换为 List us
我的 Json 字符串为 string myjson = "[ { "col1": "1", "col2": "2", "col3": "3" }, { "col1":
如何在 C# 中使用 InsertMany() MongoDB 方法在单个语句中插入多个文档 我的 MongoDB 数据库和连接 IMongoClient _client; IMongoDatabas
这是一些示例 mongodb json 来说明问题: { "_id" : ObjectId("59027ac2c902b324f6efe756"), "PersonId" : "825c47da-44
全部: 以下是有关我的开发环境的信息: MongoDB 3.0.0 MongoDB C# 驱动程序版本 1.7.0.4714 微软 Visual Studio 专业版 2013 .NET Framew
我有一个模型类,我需要将它保存在 MongoDB 集合中。 我的模型类: public Class Employee { public string EmpID { get; set; }
我目前正在使用 MongoDb $GeoWithin 查询开发 API GET 方法。如果我检查带有断点的代码,我会看到我的查询正在返回一个结果。但是当我的应用程序应该返回响应时,我在 Postman
我是一名优秀的程序员,十分优秀!