.net中的Automapper映射预定义值

问题描述

我正在尝试使用.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;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...