关于c#:如何定义其属性在运行时更改的类?

How to define a class whose properties change in runtime?

本问题已经有最佳答案,请猛点这里访问。

我有一个叫做属性的类

1
2
3
4
5
6
7
8
public class Attributes
{
    public string Length { get; set; }
    public string Size { get; set; }
    public string Color { get; set; }
    public string Material { get; set; }
    public string Diameter { get; set; }
}

这个类是通过调用返回JSON的Web服务来填充的。Web服务每次都返回一组不同的属性,并且不可能在编译时定义所有属性,因为这可能会有数千个属性。

在C中模拟这样一个类的最佳方法是什么?


你可以用一个ExpandoObject。实际上,ExpandoObject只是一个包裹的Dictionary

您可以直接"创建"属性:

1
2
dynamic employee = new ExpandoObject();
employee.Name ="John Smith";

或查询基础字典:

1
2
dynamic employee = new ExpandoObject();
((IDictionary<string, object>)employee).Add("Name","John Smith");

无论您使用什么,使用ExpandoObject都是可能的。你甚至可以把这两种用法混用。

此外,这还完美地使用了JSON。


我建议使用DataContractJSonserializer执行JSON数据的反序列化。使用dataContractJSonserializer.useSimpleDictionaryFormat设置为true,使结果为Dictionary类型。

很容易使用。