【问题标题】:Linking a class's properties to other values?将类的属性链接到其他值?
【发布时间】:2013-04-05 17:11:50
【问题描述】:

当使用一个类来表示一些外部获取的数据时,我经常发现需要将该类的属性链接到数据的属性。我最熟悉 Javascript,所以当这个出现时,我首先想到的是创建一个数组,其中包含一个对象上的属性名称和外部数据上的属性名称。

例如,如果数据是:

var jsonObj = {
    "aString": "this is a string value",
    "aNum": "44235",
    "aColor: "125,125,125"
}

我可能会创建一个数组结构,例如:

var linker = [
    ["aString", "title", "string"],
    ["aNum", "userCount", "int"],
    ["aColor", "color", "color"]
]

跟踪源属性名称、新对象上的属性名称以及值的类型。我很难在非高级语言(如 C#)中考虑类似的解决方案。想到了反射,但似乎没有正确的使用它的地方。

如何在不执行以下操作的情况下将一组字符串与一组属性关联起来?

obj.setTitle(data.getValue("aString"));
obj.setUserCount(data.getValue("aNum"));
obj.setColor(data.getValue("aColor"));
...

【问题讨论】:

  • Automapper 通常用于实现这种对象到对象的映射。github.com/AutoMapper/AutoMapper。这就是你要找的东西
  • @CodeIgnoto,这太基础了,无法证明包含任何外部代码的合理性。我正在寻找解决这个问题的设计模式。
  • “一种非高级语言,如 C#” - 您认为哪些语言是“高级”?
  • @AlexeiLevenkov,我认为 PHP、Python、Javascript、Groovy、Perl 和类似语言是高级语言。
  • 我看到“高级”=“动态类型”。看看dynamic 在 C# 中是否适合你...

标签: c# design-patterns language-agnostic


【解决方案1】:

也许dynamic / ExpandoObject 会让 C# 看起来对你更友好

即您可以设置/获取使用ExpandoObject 初始化的dynamic 对象上的任何属性

dynamic v = new System.Dynamic.ExpandoObject();
((IDictionary<String, Object>)v).Add("test", 3);
Console.Write(v.test);

【讨论】:

    【解决方案2】:

    C# 有 System.Runtime.Serialization.Json.DataContractJsonSerializer 类 http://msdn.microsoft.com/en-us/library/bb410770.aspx

    或者你可以使用 Json.NET。 这是 Json 解析器。 因此,您可以使用动态类型。

    http://json.codeplex.com/

    我英语不好。 如果我错了,我很抱歉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2019-02-04
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2016-11-30
      相关资源
      最近更新 更多