模型到字典<string,string>和返回

时间:2016-05-23 06:37:41

标签: c# reflection

我一直在网上搜索,但仍然没有找到我正在寻找的东西(U2是什么?)。足够的,我正在寻找的是一种直观的方式来解析poco(复杂的列表,nullables等)到一个字典存储在一个键/值数据库中,然后一种方法来重新填充模型。本质上,我试图实现MVC模型绑定器在从表单参数映射到模型时所执行的操作,但它们也能够执行相反的操作。我已经尝试深入挖掘源代码,但它需要控制器的所有依赖项,我真的不希望这样。这里有一些来源作为例子

public class Item
{
    public string Name { get; set; }
    public decimal? Amount { get; set; }
    public List<RowItemModel> Items { get; set; }
}

public class RowItemModel
{
    public string Description { get; set; }
    public decimal Amount { get; set; }
}

所以有模型,这就是我想要的结果:

P.S。 :注意我在db中添加了一个用于划分目的的前缀 - &gt; &#34;项目&#34;

Item.Name : The Name Here
Item.Amount : 0.0
Item.Items[0].Description : Description Here
Item.Items[0].Amount : 50
Item.Items[1].Description : Second Description

正如您所看到的,它遵循与创建用于绑定到模型的表单元素时使用的完全相同的命名约定(使用MVC)。我正在寻找的是一种优雅的方式从该(字典)绑定到模型,然后从填充的模型生成字典。

我已经使用一些非常丑陋的字符串操作然后基本反射与递归相结合实现了这一点,但是它让我的嘴里有一种不好的味道而且我不能把它推到一边生产,所以任何框架/优雅的解决方案将不胜感激。

1 个答案:

答案 0 :(得分:0)

我没有完全得到你的用例,但如果你想要的只是字典中的模型,那么简单的序列化和反序列化将有所帮助。

var jss = new JavaScriptSerializer();
var str = jss.Serialize(myObj);
var myDict = jss.Deserialize<Dictionary<string, object>(str);

当然,它并不是最高效的。实际上,您可以编写专门处理案例的自定义类。为了性能,请使用替代的序列化程序,如Json.NET。