1

我有以下用 JSON.NET 序列化的对象(不是特别是这个,但具有类似的结构)。

  1. 请求的基本类

    public class Request
    {
        public string version = "1.0";
        public RequestParams params;
    
        public Request(RequestParams params)
        {
            this.params = params;
        }
    }
    
  2. 一个基本的有效载荷类

    public abstract class RequestParams
    { }
    
  3. 有效载荷类

    public SampleRequest : RequestParams
    {
        public string someInfo = "param info";
    }
    
  4. 用法

    new Request(new SampleRequest());
    

当我知道请求的结构时,这一切都很好。但是,有时我需要将动态对象定义为“params”参数。也就是说,我需要将“params”对象视为字典(但没有 []),以便接收格式为:

    {
        "version":"1.0",
        "params":{
            "dynamic":"x",
            ...any number of dynamically added fields
            "dynamic2":"y"
        }
    }

我该怎么做?

4

2 回答 2

2

创建一个从字典Request中提取其信息的基类。params这是您的动态请求对象。

创建继承自Request该字典的类,而不是成员。这些是您“已知”的请求。

params是.Net 中的关键字。考虑使用另一个变量名称。

于 2013-11-15T10:40:43.030 回答
1

您可以使用dynamicExpandoObject

dynamic parameters = new ExpandoObject();
parameters.Name = "Name";
parameters.Age = 30;
// Adding as much property as you like dynamically

序列化后的 this 变为:

{
    'Name': 'Name',
    'Age': 32,
    /* any other dynamic property */
}
于 2013-11-15T10:44:51.637 回答