我想序列化表达式。 (创建IQuery客户端 - >将其发送到服务器 - >执行 - >将结果返回给客户端)
但老实说,表达式不可序列化。使用gnupacket Serialize.Linq(https://github.com/esskar/Serialize.Linq)我仍然有问题。将抛出以下异常:
转换类型时出错:Der Typ'Prog.DB.Query`1 [[Prog.Database.User, Prog.Database,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = null]]'mit dem Datenvertragsnamen 'ArrayOfUser:http://schemas.datacontract.org/2004/07/Prog.Database' wird nicht erwartet。 Verwenden Sie ggf. einen DataContractResolver, oderfügenSiealle unbekannten Typen statisch der Liste der bekannten Typen hinzu,beispielsweise mithilfe des KnownTypeAttribute-Attributs oder indem Sie sie zur Liste der bekanntenTypenhinzufügen,die an DataContractSerializerübergebenwird。
我用
添加了所有已知类型 JsonSerializer js = new JsonSerializer();
js.AddKnownTypes(Assembly.GetAssembly(typeof(Prog.Database.User)).GetTypes().Where(t => !ignoreList.Contains(t)).ToList());
添加js.AddKnownType(typeof(List<Prog.Database.User>));
会引发另一个异常
转换类型时出错:Der Typ “System.Collections.Generic.List`1 [LISA.Database.User]”kann der Liste bekannter Typennichthinzugefügtwerden,da bereits ein anderer Typ “LISA.Database.User []”mit demselben Datenvertragsnamen “schemas.datacontract.org/2004/07/LISA.Database:ArrayOfUser” vorhanden ist。 Wenn verschiedene Auflistungen eines bestimmten Typs vorhanden sind,z。 B. List und Test [],könnennichtbeide als bekannteTypenhinzugefügtwerden。 FügenSieggf. nur einen dieser Typen der Liste der bekannten Typen hinzu。
数据库是可序列化的(序列化模式:单向),也设置了[DataMember] + [DataContract]属性。没有表达式的序列化(只是数据库对象)工作正常。