Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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
C# Error System.MissingMethodException:没有为';类型定义无参数构造函数;System.Linq.Expressions.Expression`1_C#_Json_Serialization_Deserialization_Javascriptserializer - Fatal编程技术网

C# Error System.MissingMethodException:没有为';类型定义无参数构造函数;System.Linq.Expressions.Expression`1

C# Error System.MissingMethodException:没有为';类型定义无参数构造函数;System.Linq.Expressions.Expression`1,c#,json,serialization,deserialization,javascriptserializer,C#,Json,Serialization,Deserialization,Javascriptserializer,我想为我的web服务创建动态表达式,以允许客户端应用程序传递动态查询,从而根据需要过滤数据。为此,我正试图在C#/.NET中序列化/反序列化一个表达式。客户端应用程序可以传递到我的web服务。不幸的是,我在尝试反序列化表达式时遇到以下错误 System.MissingMethodException: No parameterless constructor defined for type of 'System.Linq.Expressions.Expression`1[[System.Func

我想为我的web服务创建动态表达式,以允许客户端应用程序传递动态查询,从而根据需要过滤数据。为此,我正试图在C#/.NET中序列化/反序列化一个表达式。客户端应用程序可以传递到我的web服务。不幸的是,我在尝试反序列化表达式时遇到以下错误

System.MissingMethodException: No parameterless constructor defined for type of 'System.Linq.Expressions.Expression`1[[System.Func`2[[Common.Entities.ModuleEntityAdmins, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]
我正在反序列化的类包含无参数构造函数,并使用适当的[DataContract]和[DataMember]属性进行修饰

[DataContract]
public class ModuleEntityAdmins
{
    [DataMember]
    public List<ModuleEntityAdmin> Modules { get; set; }

    /// <summary>
    /// Default constructor
    /// </summary>
    public ModuleEntityAdmins()
    {
        this.Modules = new List<ModuleEntityAdmin>();
    }
}

[DataContract]
public class ModuleEntityAdmin
{
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public bool Active { get; set; }
    [DataMember]
    public string Name { get; set; }

    /// <summary>
    /// Default constructor
    /// </summary>
    public ModuleEntityAdmin()
    {
    }
}
在这一点上,一切都很好

然后,我使用以下函数对字符串进行反序列化

public string SerializeObject(object objtoserialize)
{
    return JsonConvert.SerializeObject(objtoserialize);
}
public T DeserializeObject<T>(string jsonObject)
{
    T result = default(T);
    if (!string.IsNullOrEmpty(jsonObject))
    {
        //errors on the line below!!
        result = new JavaScriptSerializer().Deserialize<T>(jsonObject);
    }
    return result;
}
public T反序列化对象(字符串jsonObject)
{
T结果=默认值(T);
如果(!string.IsNullOrEmpty(jsonObject))
{
//下面一行有错误!!
结果=新的JavaScriptSerializer()。反序列化(jsonObject);
}
返回结果;
}
正是在尝试反序列化表达式时才出现错误

我已经正确地修饰了相关的类,它们都有无参数构造函数,所以我无法理解为什么会出现错误


有什么想法吗?

有一个简单的实验室遥控器。Linq-

您可以尝试以下示例代码:

            Expression<Func<ModuleEntityAdmins, ModuleEntityAdmin>> expr1 = m => m.Modules.Find(q => q.Id == 1);

            var remoteExpression = expr1.ToRemoteLinqExpression();

            var s = SerializeObject(new RequestExp { Expression = expr1 });

            RequestExp requestExp = DeserializeObject< RequestExp > (s);

            Expression<Func<ModuleEntityAdmins, ModuleEntityAdmin>> expression = requestExp.Expression.ToLinqExpression<ModuleEntityAdmins, ModuleEntityAdmin>();           
expr1=m=>m.Modules.Find(q=>q.Id==1);
var remoteExpression=expr1.ToRemoteLinqExpression();
var s=SerializeObject(新的RequestExp{Expression=expr1});
RequestExp RequestExp=反序列化对象(s);
Expression=requestExp.Expression.ToLinqExpression();

表达式树根本不值得序列化;它们有一个
ToString()
,它给出了lambda的表示,这可能就是
JsonConvert
输出的内容,但是:不可能对表达式树进行简单的反序列化;它就是不能像那样工作fwiw:我甚至不能运行你的序列化代码(复制粘贴问题的所有内容);我得到“未处理的异常。Newtonsoft.Json.JsonSerializationException:为类型为“System.Reflection.RuntimeModule.Path”的属性“ManifestModule”检测到自引用循环,路径为“Body.Method.Module.Assembly”需要明确的是:错误并没有告诉您
ModuleEntityAdmin
ModuleEntityAdmins
缺少特定的构造函数;它告诉您表达式类型缺少它。有各种库可以序列化表达式树,如Marc所说的。。但仅供参考,没有无参数构造函数的类不是类,而是表达式。不相关,但我发现混合使用
jsonvert
JavascriptSerializer
很奇怪。后者是“过时的”-不是官方的,而是根据MS自己的文档。[老兄,我输入慢,刷新,你会告诉我]我在RequestExp类型上有一个错误。这是Remote.Linq的一部分吗?
            Expression<Func<ModuleEntityAdmins, ModuleEntityAdmin>> expr1 = m => m.Modules.Find(q => q.Id == 1);

            var remoteExpression = expr1.ToRemoteLinqExpression();

            var s = SerializeObject(new RequestExp { Expression = expr1 });

            RequestExp requestExp = DeserializeObject< RequestExp > (s);

            Expression<Func<ModuleEntityAdmins, ModuleEntityAdmin>> expression = requestExp.Expression.ToLinqExpression<ModuleEntityAdmins, ModuleEntityAdmin>();