Generic ConvertTo?
本文关键字:ConvertTo Generic | 更新日期: 2023-09-27 18:27:45
我正试图弄清楚如何在使用反射和泛型的同时执行某种ConvertTo
。
我有两个具有属性的具体文件(可以是:简单类型、可为null的时间、DateTime)
我想在这些文件之间进行映射。一个是源文件,一个是目标文件。
我遇到了一个问题,我该如何转换?假设我有一个看起来像GUID的字符串。我该如何转换?
然而,我需要同时处理字符串到int、double、decmial或其他什么。
我知道有一些映射器,比如automapper和injecter,但由于我的名字不匹配,所以很难使用它们,因为没有真正的命名约定。我实际上有第三个文件,将有所有的名称和他们映射到什么。
示例
源类
public class Source
{
public string test1 { get; set; }
public int test2 { get; set; }
public int? test3 { get; set; }
public double test4 { get; set; }
public double? test5 { get; set; }
public DateTime test6 { get; set; }
public DateTime? test7 { get; set; }
public int test8 { get; set; }
public string test9 { get; set; }
}
Source source = new Source()
{
test1 = "hi",
test2 = 1,
test3 = null,
test4 = 50.50,
test5 = null,
test6 = DateTime.Now,
test7 = null,
test8 = 50,
test9 = Guid.NewGuid().ToString()
};
目的地
public class Destination
{
public string Test1 { get; set; }
public int Test2 { get; set; }
public int? Test3 { get; set; }
public double Test4 { get; set; }
public double? Test5 { get; set; }
public DateTime Test6 { get; set; }
public DateTime Test7 { get; set; }
public double Test8 { get; set; }
public Guid Test9 { get; set; }
}
在你说automapper可以处理小写和大写之前——这只是一个例子——我在实际项目中的大小写有很大不同。我正在尝试将double转换为int,将string转换为guid。
这是我的地图文件
{
"test1": {
"to": "Test1"
},
"test2": {
"to": "Test2"
},
"test3": {
"to": "Test3"
},
"test4": {
"to": "Test4"
},
"test5": {
"to": "Test5"
},
"test6": {
"to": "Test6"
},
"test7": {
"to": "Test7"
},
"test8": {
"to": "Test8"
},
"test9": {
"to": "Test9"
}
}
我将从第三个文件开始,构建一个Dictionary<字符串,类型>将名称映射到C#类型。您没有提供文件的示例,所以这里只提供示例代码:
Dictionary<String, Type> map = new Dictionary<String, Type>();
foreach(KeyValuePair<String, String> nameToTypeName in entry_in_third_file)
{
map.Add(nameToTypeName.Key, Type.GetType(nameToTypeName.Value));
}
下一次实际转换:
foreach (KeyValuePair<String, String> nameAndValue in entry_in_properties)
{
Type targetType = map[nameAndValue.Key];
String value = nameAndValue.Value;
Object convertedValue = System.Convert.ChangeType(value, targetType);
}
当然,这只是一个基本的例子,如果不仔细查看这些文件,很难知道更多。您需要根据转换的方向创建类型字典。
此外,这只是用于简单的字符串到对象的转换。如果你需要更复杂的东西,那么看看TypeConverter,它允许你为你需要的每种类型创建自己的转换类。