Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON.NET:定义可以容纳两种不同类型对象的C#字段_C#_Json.net - Fatal编程技术网

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

JSON.NET:定义可以容纳两种不同类型对象的C#字段,c#,json.net,C#,Json.net,我使用JSON.NET序列化了以下对象(不是特别的,而是类似的结构) 请求的基本类 public class Request { public string version = "1.0"; public RequestParams params; public Request(RequestParams params) { this.params = params; } } 基本有效载荷类别 public abstract clas

我使用JSON.NET序列化了以下对象(不是特别的,而是类似的结构)

  • 请求的基本类

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

    public abstract class RequestParams
    { }
    
  • 有效载荷类别

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

    new Request(new SampleRequest());
    
  • 当我知道请求的结构时,这一切都很好。然而,有时我需要将动态对象定义为“params”参数。也就是说,我需要将“params”对象视为一个字典(但不包括[]),以便接收以下格式的JSON:

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

    我该怎么做?

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

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


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

    可以使用<代码>动态< /代码>和<代码> ExpObjObjs<代码>:

    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 */
    }
    

    谢谢,通过这篇技巧,我想出了一个解决方案——将RequestParams映射到内部字典:)解决了这个问题。params单词用于示例-不是实际代码;)