将类的属性链接到其他值?

时间:2013-04-13 03:16:11

标签: c# design-patterns language-agnostic

当使用类来表示从外部获得的一些数据时,我经常发现需要将该类的属性链接到数据的属性。我最熟悉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"));
...

2 个答案:

答案 0 :(得分:0)

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

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

http://json.codeplex.com/

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

答案 1 :(得分:0)

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

即。您可以使用dynamic

初始化的ExpandoObject对象设置/获取任何属性
dynamic v = new System.Dynamic.ExpandoObject();
((IDictionary<String, Object>)v).Add("test", 3);
Console.Write(v.test);