问题描述
我正在尝试使用.NET将MongoDB中的字符串值字段映射到VisualStudio中的整数。这些字段具有一些已知值之一,例如“步行者”,“自行车”,“汽车”。如何检查这些值并映射它们以“ 0”,“ 1”,“ 2”表示?我知道automapper的基础知识,但是我找不到如何做到这一点。 我将它们作为List 接收,并且它们需要保留为List 。
使用:
- VS 19
- Automapper v8
MongoDB文档示例:
{
"Street" : "Oak","Object" : "pedestrian","Id" : "046b6c7f-0b8a-43b9-b35d-6489e6daee91","City" : "NY","Direction" : 0
}
解决方法
读取行:
vpc-123||sg
vpc-12345||sg-12345
...
public class Stuff
{
[BsonElement("_id")]
public ObjectId Id { get; set; }
public List<MyDocument> MyDocuments { get; set; }
}
选项1:
您不需要使用Automapper,只要选项名称匹配,MongoDB驱动程序就会转换枚举。
var client = new MongoClient();
var database = client.GetDatabase("test");
var collection = database.GetCollection<Stuff>("alma");
var rows = (await collection.FindAsync(FilterDefinition<Stuff>.Empty)).ToList();
...
[BsonNoId]
public class MyDocument
{
public string Id { get; set; }
public string Street { get; set; }
public ObjectEnum Object { get; set; }
public string City { get; set; }
public int Direction { get; set; }
}
public enum ObjectEnum
{
None = 0,pedestrian = 1,bicycle = 2,car = 3
}
选项2:
编写自定义序列化程序,您的返回类型可以是您喜欢的任何内容:
foreach (var row in rows)
{
// use the enum,or if you need the associated number just use int cast
int myNumberRepresentation = (int)row.MyDocuments[0].Object;
}