JSON.NET:定义可以容纳两种不同类型对象的C#字段

时间:2013-11-15 10:34:00

标签: c# json.net

我有以下使用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());
    
  5. 当我知道请求的结构时,这很好。但是,有时我需要将动态对象定义为“params”参数。也就是说,我需要将“params”对象视为一个Dictionary(但没有[]),以便我以下列格式接收JSON:

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

    我该怎么做?

2 个答案:

答案 0 :(得分:2)

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

创建继承自Request的类,而不是成员。这些是你'已知'的请求。

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

答案 1 :(得分:1)

您可以使用dynamicExpandoObject

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

{
    'Name': 'Name',
    'Age': 32,
    /* any other dynamic property */
}