C# 字典模型<;字符串,字符串>;回来

C# 字典模型<;字符串,字符串>;回来,c#,reflection,C#,Reflection,我一直在搜索互联网,但仍然没有找到我要找的(什么U2?)。够了,我要寻找的是一种直观的方法,将poco(复杂的列表、空值等)解析为字典,存储在键/值数据库中,然后重新填充模型。本质上,我试图实现MVC模型绑定器在从表单参数映射到模型时所做的工作,但它们也可以做相反的工作。我已经试着挖掘源代码,但它需要控制器的所有依赖项,我真的不想这样。以下是一些源代码作为示例 public class Item { public string Name { get; set; } public

我一直在搜索互联网,但仍然没有找到我要找的(什么U2?)。够了,我要寻找的是一种直观的方法,将poco(复杂的列表、空值等)解析为字典,存储在键/值数据库中,然后重新填充模型。本质上,我试图实现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; }
}
如您所见,它遵循与创建表单元素以绑定到模型(使用MVC)时使用的命名约定完全相同的命名约定。我要寻找的是一种优雅的方式,从该(字典)绑定到模型,然后从填充的模型生成字典


我已经通过一些非常难看的字符串操作和基本反射结合递归实现了这一点,但这让我口齿不清,我无法将其推向生产,因此任何框架/优雅的解决方案都将受到赞赏。

我不完全理解您的用例,但是,如果您只想在字典中创建模型,那么简单的序列化和反序列化将有所帮助

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

var myDict=jss.Deserialize我没有完全理解您的用例,但是如果您只想在字典中创建模型,那么简单的序列化和反序列化将有所帮助

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

var myDict=jss.deserialize您能解释一下为什么要实现这一点吗?听起来有点像。我的用例如下:我需要将表单数据持久化到数据库中。但是,表单是动态的(想象一下,在发票表单中,您可以动态添加行项目)。我必须使用的表结构是一个扁平的键/值结构,因此没有关系模型,因此我认为最好的方法是将数据以控制器接收到的表单参数的精确格式保存下来,然后我显然需要反向加载备份和编辑。您能解释为什么要实现这一点吗?听起来有点像。我的用例如下:我需要将表单数据持久化到数据库中。但是,表单是动态的(想象一下,在发票表单中,您可以动态添加行项目)。我必须使用的表结构是一个扁平的键/值结构,因此没有关系模型,所以我认为最好的方法是将数据以控制器接收到的表单参数的精确格式保存下来,然后我显然需要做相反的操作来加载备份和编辑应答。我在搜索中遇到了这个解决方案,但是这个选项的问题(除了性能)是没有为我需要的嵌套项生成正确的键。(它只是有一个用于集合名称的键,然后是一个json字符串作为集合值)@MarkRedfern我不确定javascript序列化程序产生的输出。试试Json.NET,它会给你一个更准确的
字典
,谢谢你的回复。我在搜索中遇到了这个解决方案,但是这个选项的问题(除了性能)是没有为我需要的嵌套项生成正确的键。(它只是有一个用于集合名称的键,然后是一个json字符串作为集合值)@MarkRedfern我不确定javascript序列化程序产生的输出。试试Json.NET,它会给你一个更准确的
字典