From e3d94e3dfde4fcfaa0497760f352b3602ffce598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=20=E6=96=B0=E8=B7=AF?= Date: Fri, 14 May 2021 11:35:18 +0800 Subject: [PATCH 1/2] initial commit --- .../Aq.ExpressionJsonSerializer.Tests.csproj | 92 -------------- .../Properties/AssemblyInfo.cs | 36 ------ Aq.ExpressionJsonSerializer.sln | 26 ---- .../Aq.ExpressionJsonSerializer.csproj | 113 ------------------ .../ExpressionJsonConverter.cs | 40 ------- .../Properties/AssemblyInfo.cs | 36 ------ Aq.ExpressionJsonSerializer/packages.config | 4 - .../ExpressionJsonSerializerTest.cs | 79 ++++++------ .../Itminus.ExprSerDe.Tests.csproj | 30 +++++ Itminus.ExprSerDe.sln | 51 ++++++++ .../Deserializer.cs | 43 +++++-- .../Deserializer.BinaryExpression.cs | 5 +- .../Deserializer.BlockExpression.cs | 5 +- .../Deserializer.ConditionalExpression.cs | 5 +- .../Deserializer.ConstantExpression.cs | 5 +- .../Deserializer.DebugInfoExpression.cs | 2 +- .../Deserializer.DefaultExpression.cs | 5 +- .../Deserializer.DynamicExpression.cs | 5 +- .../Deserializer.GotoExpression.cs | 5 +- .../Deserializer.IndexExpression.cs | 5 +- .../Deserializer.InvocationExpression.cs | 2 +- .../Deserializer.LabelExpression.cs | 2 +- .../Deserializer.LambdaExpression.cs | 5 +- .../Deserializer.ListInitExpression.cs | 5 +- .../Deserializer.LoopExpression.cs | 5 +- .../Deserializer.MemberExpression.cs | 5 +- .../Deserializer.MemberInitExpression.cs | 5 +- .../Deserializer.MethodCallExpression.cs | 5 +- .../Deserializer.NewArrayExpression.cs | 5 +- .../Deserializer.NewExpression.cs | 5 +- .../Deserializer.ParameterExpression.cs | 5 +- .../Deserializer/Deserializer.Reflection.cs | 72 ++++++----- ...Deserializer.RuntimeVariablesExpression.cs | 5 +- .../Deserializer.SwitchExpression.cs | 5 +- .../Deserializer.TryExpression.cs | 2 +- .../Deserializer.TypeBinaryExpression.cs | 2 +- .../Deserializer.UnaryExpression.cs | 2 +- Itminus.ExprSerDe/ExpressionJsonConverter.cs | 32 +++++ Itminus.ExprSerDe/Itminus.ExprSerDe.csproj | 16 +++ .../Serializer.cs | 7 +- .../Serializer/Serialization.Binary.cs | 2 +- .../Serializer/Serialization.Block.cs | 2 +- .../Serializer/Serialization.Conditional.cs | 2 +- .../Serializer/Serialization.Constant.cs | 2 +- .../Serializer/Serialization.DebugInfo.cs | 2 +- .../Serializer/Serialization.Default.cs | 2 +- .../Serializer/Serialization.Dynamic.cs | 2 +- .../Serializer/Serialization.Goto.cs | 2 +- .../Serializer/Serialization.Index.cs | 2 +- .../Serializer/Serialization.Invocation.cs | 2 +- .../Serializer/Serialization.Label.cs | 2 +- .../Serializer/Serialization.Lambda.cs | 2 +- .../Serializer/Serialization.ListInit.cs | 2 +- .../Serializer/Serialization.Loop.cs | 2 +- .../Serializer/Serialization.Member.cs | 2 +- .../Serializer/Serialization.MemberInit.cs | 2 +- .../Serializer/Serialization.MethodCall.cs | 2 +- .../Serializer/Serialization.New.cs | 2 +- .../Serializer/Serialization.NewArray.cs | 2 +- .../Serializer/Serialization.Parameter.cs | 2 +- .../Serialization.RuntimeVariables.cs | 2 +- .../Serializer/Serialization.Switch.cs | 2 +- .../Serializer/Serialization.Try.cs | 2 +- .../Serializer/Serialization.TypeBinary.cs | 2 +- .../Serializer/Serialization.Unary.cs | 2 +- .../Serializer/Serializer.Reflection.cs | 15 +-- 66 files changed, 316 insertions(+), 533 deletions(-) delete mode 100644 Aq.ExpressionJsonSerializer.Tests/Aq.ExpressionJsonSerializer.Tests.csproj delete mode 100644 Aq.ExpressionJsonSerializer.Tests/Properties/AssemblyInfo.cs delete mode 100644 Aq.ExpressionJsonSerializer.sln delete mode 100644 Aq.ExpressionJsonSerializer/Aq.ExpressionJsonSerializer.csproj delete mode 100644 Aq.ExpressionJsonSerializer/ExpressionJsonConverter.cs delete mode 100644 Aq.ExpressionJsonSerializer/Properties/AssemblyInfo.cs delete mode 100644 Aq.ExpressionJsonSerializer/packages.config rename {Aq.ExpressionJsonSerializer.Tests => Itminus.ExprSerDe.Tests}/ExpressionJsonSerializerTest.cs (87%) create mode 100644 Itminus.ExprSerDe.Tests/Itminus.ExprSerDe.Tests.csproj create mode 100644 Itminus.ExprSerDe.sln rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer.cs (77%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.BinaryExpression.cs (96%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.BlockExpression.cs (80%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.ConditionalExpression.cs (79%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.ConstantExpression.cs (84%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.DebugInfoExpression.cs (90%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.DefaultExpression.cs (72%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.DynamicExpression.cs (60%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.GotoExpression.cs (88%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.IndexExpression.cs (81%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.InvocationExpression.cs (95%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.LabelExpression.cs (90%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.LambdaExpression.cs (88%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.ListInitExpression.cs (60%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.LoopExpression.cs (84%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.MemberExpression.cs (78%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.MemberInitExpression.cs (59%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.MethodCallExpression.cs (82%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.NewArrayExpression.cs (82%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.NewExpression.cs (87%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.ParameterExpression.cs (90%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.Reflection.cs (80%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.RuntimeVariablesExpression.cs (84%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.SwitchExpression.cs (60%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.TryExpression.cs (90%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.TypeBinaryExpression.cs (95%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Deserializer/Deserializer.UnaryExpression.cs (98%) create mode 100644 Itminus.ExprSerDe/ExpressionJsonConverter.cs create mode 100644 Itminus.ExprSerDe/Itminus.ExprSerDe.csproj rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer.cs (96%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Binary.cs (94%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Block.cs (93%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Conditional.cs (93%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Constant.cs (95%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.DebugInfo.cs (89%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Default.cs (90%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Dynamic.cs (89%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Goto.cs (94%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Index.cs (93%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Invocation.cs (93%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Label.cs (89%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Lambda.cs (94%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.ListInit.cs (89%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Loop.cs (96%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Member.cs (92%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.MemberInit.cs (89%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.MethodCall.cs (93%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.New.cs (94%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.NewArray.cs (93%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Parameter.cs (95%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.RuntimeVariables.cs (92%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Switch.cs (89%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Try.cs (89%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.TypeBinary.cs (93%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serialization.Unary.cs (92%) rename {Aq.ExpressionJsonSerializer => Itminus.ExprSerDe}/Serializer/Serializer.Reflection.cs (87%) diff --git a/Aq.ExpressionJsonSerializer.Tests/Aq.ExpressionJsonSerializer.Tests.csproj b/Aq.ExpressionJsonSerializer.Tests/Aq.ExpressionJsonSerializer.Tests.csproj deleted file mode 100644 index 9a66084..0000000 --- a/Aq.ExpressionJsonSerializer.Tests/Aq.ExpressionJsonSerializer.Tests.csproj +++ /dev/null @@ -1,92 +0,0 @@ - - - - Debug - AnyCPU - {348525AE-72C1-4250-81D2-79D244856F7C} - Library - Properties - Aq.ExpressionJsonSerializer.Tests - Aq.ExpressionJsonSerializer.Tests - v4.5 - 512 - {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\Newtonsoft.Json.5.0.6\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - - - - - - - - - {F6FD2AAC-7409-48A1-80C5-112CCAF4FA1A} - Aq.ExpressionJsonSerializer - - - - - - - False - - - False - - - False - - - False - - - - - - - - \ No newline at end of file diff --git a/Aq.ExpressionJsonSerializer.Tests/Properties/AssemblyInfo.cs b/Aq.ExpressionJsonSerializer.Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index 79a387a..0000000 --- a/Aq.ExpressionJsonSerializer.Tests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Aq.ExpressionJsonSerializer.Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Aq.ExpressionJsonSerializer.Tests")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("edba1c1d-d374-4947-9224-a07b016026a7")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Aq.ExpressionJsonSerializer.sln b/Aq.ExpressionJsonSerializer.sln deleted file mode 100644 index 08eb0ff..0000000 --- a/Aq.ExpressionJsonSerializer.sln +++ /dev/null @@ -1,26 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aq.ExpressionJsonSerializer", "Aq.ExpressionJsonSerializer\Aq.ExpressionJsonSerializer.csproj", "{F6FD2AAC-7409-48A1-80C5-112CCAF4FA1A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aq.ExpressionJsonSerializer.Tests", "Aq.ExpressionJsonSerializer.Tests\Aq.ExpressionJsonSerializer.Tests.csproj", "{348525AE-72C1-4250-81D2-79D244856F7C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F6FD2AAC-7409-48A1-80C5-112CCAF4FA1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6FD2AAC-7409-48A1-80C5-112CCAF4FA1A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6FD2AAC-7409-48A1-80C5-112CCAF4FA1A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6FD2AAC-7409-48A1-80C5-112CCAF4FA1A}.Release|Any CPU.Build.0 = Release|Any CPU - {348525AE-72C1-4250-81D2-79D244856F7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {348525AE-72C1-4250-81D2-79D244856F7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {348525AE-72C1-4250-81D2-79D244856F7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {348525AE-72C1-4250-81D2-79D244856F7C}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Aq.ExpressionJsonSerializer/Aq.ExpressionJsonSerializer.csproj b/Aq.ExpressionJsonSerializer/Aq.ExpressionJsonSerializer.csproj deleted file mode 100644 index d0274e0..0000000 --- a/Aq.ExpressionJsonSerializer/Aq.ExpressionJsonSerializer.csproj +++ /dev/null @@ -1,113 +0,0 @@ - - - - - Debug - AnyCPU - {F6FD2AAC-7409-48A1-80C5-112CCAF4FA1A} - Library - Properties - Aq.ExpressionJsonSerializer - Aq.ExpressionJsonSerializer - v4.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\Newtonsoft.Json.5.0.6\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Aq.ExpressionJsonSerializer/ExpressionJsonConverter.cs b/Aq.ExpressionJsonSerializer/ExpressionJsonConverter.cs deleted file mode 100644 index 3a778c0..0000000 --- a/Aq.ExpressionJsonSerializer/ExpressionJsonConverter.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Linq.Expressions; -using System.Reflection; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace Aq.ExpressionJsonSerializer -{ - public class ExpressionJsonConverter : JsonConverter - { - private static readonly System.Type TypeOfExpression = typeof (Expression); - - public ExpressionJsonConverter(Assembly resolvingAssembly) - { - this._assembly = resolvingAssembly; - } - - public override bool CanConvert(System.Type objectType) - { - return objectType == TypeOfExpression - || objectType.IsSubclassOf(TypeOfExpression); - } - - public override void WriteJson( - JsonWriter writer, object value, JsonSerializer serializer) - { - Serializer.Serialize(writer, serializer, (Expression) value); - } - - public override object ReadJson( - JsonReader reader, System.Type objectType, - object existingValue, JsonSerializer serializer) - { - return Deserializer.Deserialize( - this._assembly, JToken.ReadFrom(reader) - ); - } - - private readonly Assembly _assembly; - } -} diff --git a/Aq.ExpressionJsonSerializer/Properties/AssemblyInfo.cs b/Aq.ExpressionJsonSerializer/Properties/AssemblyInfo.cs deleted file mode 100644 index fc16230..0000000 --- a/Aq.ExpressionJsonSerializer/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Aq.ExpressionJsonSerializer")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Aq.ExpressionJsonSerializer")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("da0875e2-9ef3-401f-a179-87e101fa1073")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Aq.ExpressionJsonSerializer/packages.config b/Aq.ExpressionJsonSerializer/packages.config deleted file mode 100644 index a3b7dcc..0000000 --- a/Aq.ExpressionJsonSerializer/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Aq.ExpressionJsonSerializer.Tests/ExpressionJsonSerializerTest.cs b/Itminus.ExprSerDe.Tests/ExpressionJsonSerializerTest.cs similarity index 87% rename from Aq.ExpressionJsonSerializer.Tests/ExpressionJsonSerializerTest.cs rename to Itminus.ExprSerDe.Tests/ExpressionJsonSerializerTest.cs index 9bad280..6eeca93 100644 --- a/Aq.ExpressionJsonSerializer.Tests/ExpressionJsonSerializerTest.cs +++ b/Itminus.ExprSerDe.Tests/ExpressionJsonSerializerTest.cs @@ -2,201 +2,200 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; -using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json; +using Xunit; -namespace Aq.ExpressionJsonSerializer.Tests +namespace Itminus.ExprSerializer.Tests { - [TestClass] public class ExpressionJsonSerializerTest { - [TestMethod] + [Fact] public void Assignment() { TestExpression((Expression>) (c => c.A + c.B)); } - [TestMethod] + [Fact] public void BitwiseAnd() { TestExpression((Expression>) (c => c.A & c.B)); } - [TestMethod] + [Fact] public void LogicalAnd() { TestExpression((Expression>) (c => c.A > 0 && c.B > 0)); } - [TestMethod] + [Fact] public void ArrayIndex() { TestExpression((Expression>) (c => c.Array[0])); } - [TestMethod] + [Fact] public void ArrayLength() { TestExpression((Expression>) (c => c.Array.Length)); } - [TestMethod] + [Fact] public void Method() { TestExpression((Expression>) (c => c.Method())); } - [TestMethod] + [Fact] public void MethodWithArguments() { TestExpression((Expression>) (c => c.Method("B"))); } - [TestMethod] + [Fact] public void Coalesce() { TestExpression((Expression>) (c => c.C ?? c.A)); } - [TestMethod] + [Fact] public void Conditional() { TestExpression((Expression>) (c => c.C == null ? c.A : c.B)); } - [TestMethod] + [Fact] public void Convert() { TestExpression((Expression>) (c => (short) (c.C ?? 0))); } - [TestMethod] + [Fact] public void Decrement() { TestExpression((Expression>) (c => c.A - 1)); } - [TestMethod] + [Fact] public void DivisionWithCast() { TestExpression((Expression>) (c => (float) c.A / c.B)); } - [TestMethod] + [Fact] public void Equality() { TestExpression((Expression>) (c => c.A == c.B)); } - [TestMethod] + [Fact] public void Xor() { TestExpression((Expression>) (c => c.A ^ c.B)); } - [TestMethod] + [Fact] public void LinqExtensions() { TestExpression((Expression>) (c => c.Array.FirstOrDefault())); } - [TestMethod] + [Fact] public void GreaterThan() { TestExpression((Expression>) (c => c.A > c.B)); } - [TestMethod] + [Fact] public void Increment() { TestExpression((Expression>) (c => c.A + 1)); } - [TestMethod] + [Fact] public void Indexer() { TestExpression((Expression>) (c => c["A"])); } - [TestMethod] + [Fact] public void Invoke() { TestExpression((Expression>) (c => c.Func())); } - [TestMethod] + [Fact] public void Constant() { TestExpression((Expression>) (c => false)); } - [TestMethod] + [Fact] public void Lambda() { TestExpression((Expression>) (c => ((Func) (_ => _.A))(c))); } - [TestMethod] + [Fact] public void LeftShift() { TestExpression((Expression>) (c => c.A << c.C ?? 0)); } - [TestMethod] + [Fact] public void PropertyAccess() { TestExpression((Expression>) (c => c.B)); } - [TestMethod] + [Fact] public void Negation() { TestExpression((Expression>) (c => -c.A)); } - [TestMethod] + [Fact] public void New() { TestExpression((Expression>) (c => new object())); } - [TestMethod] + [Fact] public void NewWithArguments() { TestExpression((Expression>) (c => new String('s', 1))); } - [TestMethod] + [Fact] public void InitArray() { TestExpression((Expression>) (c => new[] { 0 })); } - [TestMethod] + [Fact] public void InitEmptyArray() { TestExpression((Expression>) (c => new int[3, 2])); } - [TestMethod] + [Fact] public void TypeAs() { TestExpression((Expression>) (c => c as object)); } - [TestMethod] + [Fact] public void TypeOf() { TestExpression((Expression>) (c => typeof (Context) == c.GetType())); } - [TestMethod] + [Fact] public void TypeIs() { TestExpression((Expression>) (c => c is object)); } - [TestMethod] + [Fact] public void MethodResultCast() { TestExpression((Expression>) (c => (int) c.Method3())); @@ -239,14 +238,12 @@ private static void TestExpression(LambdaExpression source) }; var settings = new JsonSerializerSettings(); - settings.Converters.Add(new ExpressionJsonConverter( - Assembly.GetAssembly(typeof (ExpressionJsonSerializerTest)) - )); + settings.Converters.Add(new ExpressionJsonConverter( )); var json = JsonConvert.SerializeObject(source, settings); var target = JsonConvert.DeserializeObject(json, settings); - Assert.AreEqual( + Assert.Equal( ExpressionResult(source, context), ExpressionResult(target, context) ); @@ -254,7 +251,9 @@ private static void TestExpression(LambdaExpression source) private static string ExpressionResult(LambdaExpression expr, Context context) { - return JsonConvert.SerializeObject(expr.Compile().DynamicInvoke(context)); + return JsonConvert.SerializeObject(expr.Compile().DynamicInvoke(context), new JsonSerializerSettings { + ReferenceLoopHandling = ReferenceLoopHandling.Ignore, + }); } } } diff --git a/Itminus.ExprSerDe.Tests/Itminus.ExprSerDe.Tests.csproj b/Itminus.ExprSerDe.Tests/Itminus.ExprSerDe.Tests.csproj new file mode 100644 index 0000000..87059e9 --- /dev/null +++ b/Itminus.ExprSerDe.Tests/Itminus.ExprSerDe.Tests.csproj @@ -0,0 +1,30 @@ + + + + net5.0 + + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + + + diff --git a/Itminus.ExprSerDe.sln b/Itminus.ExprSerDe.sln new file mode 100644 index 0000000..96712b6 --- /dev/null +++ b/Itminus.ExprSerDe.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.6.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Itminus.ExprSerDe", "Itminus.ExprSerDe\Itminus.ExprSerDe.csproj", "{1E17D066-46E4-445D-AD8D-38B1DB12289B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Itminus.ExprSerDe.Tests", "Itminus.ExprSerDe.Tests\Itminus.ExprSerDe.Tests.csproj", "{E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Debug|x64.ActiveCfg = Debug|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Debug|x64.Build.0 = Debug|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Debug|x86.ActiveCfg = Debug|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Debug|x86.Build.0 = Debug|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Release|Any CPU.Build.0 = Release|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Release|x64.ActiveCfg = Release|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Release|x64.Build.0 = Release|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Release|x86.ActiveCfg = Release|Any CPU + {1E17D066-46E4-445D-AD8D-38B1DB12289B}.Release|x86.Build.0 = Release|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Debug|x64.ActiveCfg = Debug|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Debug|x64.Build.0 = Debug|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Debug|x86.ActiveCfg = Debug|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Debug|x86.Build.0 = Debug|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Release|Any CPU.Build.0 = Release|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Release|x64.ActiveCfg = Release|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Release|x64.Build.0 = Release|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Release|x86.ActiveCfg = Release|Any CPU + {E6CCE127-B0A7-48A9-B234-EE36BBBBC5C6}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A46F1A77-74BC-4FEF-9F79-367A4AF378AA} + EndGlobalSection +EndGlobal diff --git a/Aq.ExpressionJsonSerializer/Deserializer.cs b/Itminus.ExprSerDe/Deserializer.cs similarity index 77% rename from Aq.ExpressionJsonSerializer/Deserializer.cs rename to Itminus.ExprSerDe/Deserializer.cs index 5480300..ca3fc0b 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer.cs +++ b/Itminus.ExprSerDe/Deserializer.cs @@ -5,29 +5,33 @@ using System.Reflection; using Newtonsoft.Json.Linq; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { internal sealed partial class Deserializer { - public static Expression Deserialize(Assembly assembly, JToken token) + public static Expression Deserialize(JToken token) { - var d = new Deserializer(assembly); + var d = new Deserializer(); return d.Expression(token); } private readonly Dictionary _labelTargets = new Dictionary(); - private readonly Assembly _assembly; - private Deserializer(Assembly assembly) - { - this._assembly = assembly; - } + private Deserializer() { } - private object Deserialize(JToken token, System.Type type) + private object Deserialize(JToken token, Type type) { return token.ToObject(type); } + /// + /// 获取名为name的JProperty,并用result函数处理后返回 + /// + /// + /// + /// + /// + /// private T Prop(JObject obj, string name, Func result = null) { var prop = obj.Property(name); @@ -38,16 +42,34 @@ private T Prop(JObject obj, string name, Func result = null) return result(prop == null ? null : prop.Value); } + /// + /// 获取名为name的JProperty的Value + /// + /// + /// + /// private JToken Prop(JObject obj, string name) { return obj.Property(name).Value; } + /// + /// 结果处理函数,把属性值转换为枚举 + /// + /// + /// + /// private T Enum(JToken token) { return (T) System.Enum.Parse(typeof(T), token.Value()); } + /// + /// 返回一个处理函数,该处理函数用于把令牌作为JArray,然后用所输入的result函数逐一处理之 + /// + /// + /// + /// private Func> Enumerable(Func result) { return token => { @@ -55,7 +77,8 @@ private T Enum(JToken token) return null; } var array = (JArray) token; - return array.Select(result); + var x = array.Select(result).ToList(); + return x; }; } diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.BinaryExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.BinaryExpression.cs similarity index 96% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.BinaryExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.BinaryExpression.cs index eda8f05..55a64e8 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.BinaryExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.BinaryExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private BinaryExpression BinaryExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private BinaryExpression BinaryExpression( ExpressionType nodeType, System.Type type, JObject obj) { var left = this.Prop(obj, "left", this.Expression); var right = this.Prop(obj, "right", this.Expression); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.BlockExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.BlockExpression.cs similarity index 80% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.BlockExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.BlockExpression.cs index 13f5bfc..0e9b5a0 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.BlockExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.BlockExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private BlockExpression BlockExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private BlockExpression BlockExpression( ExpressionType nodeType, System.Type type, JObject obj) { var expressions = this.Prop(obj, "expressions", this.Enumerable(this.Expression)); var variables = this.Prop(obj, "variables", this.Enumerable(this.ParameterExpression)); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ConditionalExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.ConditionalExpression.cs similarity index 79% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ConditionalExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.ConditionalExpression.cs index 90082e0..5b0a02e 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ConditionalExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.ConditionalExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private ConditionalExpression ConditionalExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private ConditionalExpression ConditionalExpression( ExpressionType nodeType, System.Type type, JObject obj) { var test = this.Prop(obj, "test", this.Expression); var ifTrue = this.Prop(obj, "ifTrue", this.Expression); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ConstantExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.ConstantExpression.cs similarity index 84% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ConstantExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.ConstantExpression.cs index 2408955..1ade31f 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ConstantExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.ConstantExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private ConstantExpression ConstantExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private ConstantExpression ConstantExpression( ExpressionType nodeType, System.Type type, JObject obj) { object value; diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.DebugInfoExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.DebugInfoExpression.cs similarity index 90% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.DebugInfoExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.DebugInfoExpression.cs index 0ec1bf6..6547b83 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.DebugInfoExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.DebugInfoExpression.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.DefaultExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.DefaultExpression.cs similarity index 72% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.DefaultExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.DefaultExpression.cs index 91d63c1..d1aaf35 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.DefaultExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.DefaultExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private DefaultExpression DefaultExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private DefaultExpression DefaultExpression( ExpressionType nodeType, System.Type type, JObject obj) { switch (nodeType) { case ExpressionType.Default: diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.DynamicExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.DynamicExpression.cs similarity index 60% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.DynamicExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.DynamicExpression.cs index b9d9259..50160bf 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.DynamicExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.DynamicExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private DynamicExpression DynamicExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private DynamicExpression DynamicExpression( ExpressionType nodeType, System.Type type, JObject obj) { throw new NotImplementedException(); } diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.GotoExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.GotoExpression.cs similarity index 88% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.GotoExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.GotoExpression.cs index 1bd4726..7af4e6a 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.GotoExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.GotoExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private GotoExpression GotoExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private GotoExpression GotoExpression( ExpressionType nodeType, System.Type type, JObject obj) { var value = this.Expression(this.Prop(obj, "value")); var kind = this.Enum(this.Prop(obj, "kind")); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.IndexExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.IndexExpression.cs similarity index 81% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.IndexExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.IndexExpression.cs index c1534e7..865b3d4 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.IndexExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.IndexExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private IndexExpression IndexExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private IndexExpression IndexExpression( ExpressionType nodeType, System.Type type, JObject obj) { var expression = this.Prop(obj, "object", this.Expression); var indexer = this.Prop(obj, "indexer", this.Property); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.InvocationExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.InvocationExpression.cs similarity index 95% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.InvocationExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.InvocationExpression.cs index 50434f3..362ea0a 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.InvocationExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.InvocationExpression.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.LabelExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.LabelExpression.cs similarity index 90% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.LabelExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.LabelExpression.cs index a582659..914f21c 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.LabelExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.LabelExpression.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.LambdaExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.LambdaExpression.cs similarity index 88% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.LambdaExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.LambdaExpression.cs index 62f2bf1..123d003 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.LambdaExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.LambdaExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private LambdaExpression LambdaExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private LambdaExpression LambdaExpression( ExpressionType nodeType, System.Type type, JObject obj) { var body = this.Prop(obj, "body", this.Expression); var tailCall = this.Prop(obj, "tailCall").Value(); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ListInitExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.ListInitExpression.cs similarity index 60% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ListInitExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.ListInitExpression.cs index c741e37..08a02e3 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ListInitExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.ListInitExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private ListInitExpression ListInitExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private ListInitExpression ListInitExpression( ExpressionType nodeType, System.Type type, JObject obj) { throw new NotImplementedException(); } diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.LoopExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.LoopExpression.cs similarity index 84% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.LoopExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.LoopExpression.cs index 60bc281..64ab665 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.LoopExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.LoopExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private LoopExpression LoopExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private LoopExpression LoopExpression( ExpressionType nodeType, System.Type type, JObject obj) { var body = this.Prop(obj, "body", this.Expression); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.MemberExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.MemberExpression.cs similarity index 78% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.MemberExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.MemberExpression.cs index 31cd4d3..2e012e7 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.MemberExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.MemberExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private MemberExpression MemberExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private MemberExpression MemberExpression( ExpressionType nodeType, System.Type type, JObject obj) { var expression = this.Prop(obj, "expression", this.Expression); var member = this.Prop(obj, "member", this.Member); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.MemberInitExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.MemberInitExpression.cs similarity index 59% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.MemberInitExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.MemberInitExpression.cs index efc72f8..c1402b4 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.MemberInitExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.MemberInitExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private MemberInitExpression MemberInitExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private MemberInitExpression MemberInitExpression( ExpressionType nodeType, System.Type type, JObject obj) { throw new NotImplementedException(); } diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.MethodCallExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.MethodCallExpression.cs similarity index 82% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.MethodCallExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.MethodCallExpression.cs index e7675f6..22ea3e6 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.MethodCallExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.MethodCallExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private MethodCallExpression MethodCallExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private MethodCallExpression MethodCallExpression( ExpressionType nodeType, System.Type type, JObject obj) { var instance = this.Prop(obj, "object", this.Expression); var method = this.Prop(obj, "method", this.Method); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.NewArrayExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.NewArrayExpression.cs similarity index 82% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.NewArrayExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.NewArrayExpression.cs index b7c7ebc..26f6dc0 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.NewArrayExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.NewArrayExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private NewArrayExpression NewArrayExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private NewArrayExpression NewArrayExpression( ExpressionType nodeType, System.Type type, JObject obj) { var elementType = this.Prop(obj, "elementType", this.Type); var expressions = this.Prop(obj, "expressions", this.Enumerable(this.Expression)); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.NewExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.NewExpression.cs similarity index 87% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.NewExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.NewExpression.cs index e2dc451..0a44fe6 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.NewExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.NewExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private NewExpression NewExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private NewExpression NewExpression( ExpressionType nodeType, System.Type type, JObject obj) { var constructor = this.Prop(obj, "constructor", this.Constructor); var arguments = this.Prop(obj, "arguments", this.Enumerable(this.Expression)); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ParameterExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.ParameterExpression.cs similarity index 90% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ParameterExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.ParameterExpression.cs index b93c232..52a6697 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.ParameterExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.ParameterExpression.cs @@ -4,15 +4,14 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { private readonly Dictionary _parameterExpressions = new Dictionary(); - private ParameterExpression ParameterExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private ParameterExpression ParameterExpression( ExpressionType nodeType, System.Type type, JObject obj) { var name = this.Prop(obj, "name", t => t.Value()); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.Reflection.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.Reflection.cs similarity index 80% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.Reflection.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.Reflection.cs index 19dd0f9..1bd0496 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.Reflection.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.Reflection.cs @@ -4,16 +4,27 @@ using System.Reflection; using Newtonsoft.Json.Linq; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { + class AssemblyTypes + { + public Assembly Assembly { get; set; } + public string AssemblyName => Assembly.FullName; + public Dictionary TypeCache { get; } = new Dictionary(); + } + + + partial class Deserializer { - private static readonly Dictionary>> - TypeCache = new Dictionary>>(); + private static readonly Dictionary>> ConstructorCache = new Dictionary>>(); - private static readonly Dictionary>> - ConstructorCache = new Dictionary>>(); + /// + /// 结果处理函数,把属性值转换成Type + /// + /// + /// private Type Type(JToken token) { if (token == null || token.Type != JTokenType.Object) { @@ -25,34 +36,7 @@ private Type Type(JToken token) var typeName = this.Prop(obj, "typeName", t => t.Value()); var generic = this.Prop(obj, "genericArguments", this.Enumerable(this.Type)); - Dictionary> assemblies; - if (!TypeCache.TryGetValue(this._assembly, out assemblies)) { - assemblies = new Dictionary>(); - TypeCache[this._assembly] = assemblies; - } - - Dictionary types; - if (!assemblies.TryGetValue(assemblyName, out types)) { - types = new Dictionary(); - assemblies[assemblyName] = types; - } - - Type type; - if (!types.TryGetValue(typeName, out type)) { - type = this._assembly.GetType(typeName); - if (type == null) { - var assembly = Assembly.Load(new AssemblyName(assemblyName)); - type = assembly.GetType(typeName); - } - if (type == null) { - throw new Exception( - "Type could not be found: " - + assemblyName + "." + typeName - ); - } - types[typeName] = type; - } - + Type type = System.Type.GetType(typeName); if (generic != null && type.IsGenericTypeDefinition) { type = type.MakeGenericType(generic.ToArray()); } @@ -60,6 +44,12 @@ private Type Type(JToken token) return type; } + + /// + /// 结果处理函数,把属性转换成 ConstructorInfo + /// + /// + /// private ConstructorInfo Constructor(JToken token) { if (token == null || token.Type != JTokenType.Object) { @@ -135,6 +125,12 @@ private ConstructorInfo Constructor(JToken token) return constructor; } + + /// + /// 结果处理函数,把JToken处理成 MethodInfo + /// + /// + /// private MethodInfo Method(JToken token) { if (token == null || token.Type != JTokenType.Object) { @@ -160,6 +156,11 @@ private MethodInfo Method(JToken token) return method; } + /// + /// 结果处理函数,把JToken处理成PropertyInfo + /// + /// + /// private PropertyInfo Property(JToken token) { if (token == null || token.Type != JTokenType.Object) { @@ -178,6 +179,11 @@ private PropertyInfo Property(JToken token) return properties.First(p => p.Name == name && p.ToString() == signature); } + /// + /// 结果处理函数,把JToken处理成MemberInfo + /// + /// + /// private MemberInfo Member(JToken token) { if (token == null || token.Type != JTokenType.Object) { diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.RuntimeVariablesExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.RuntimeVariablesExpression.cs similarity index 84% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.RuntimeVariablesExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.RuntimeVariablesExpression.cs index d254fb0..6c3109e 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.RuntimeVariablesExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.RuntimeVariablesExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private RuntimeVariablesExpression RuntimeVariablesExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private RuntimeVariablesExpression RuntimeVariablesExpression( ExpressionType nodeType, System.Type type, JObject obj) { var variables = this.Prop(obj, "variables", this.Enumerable(this.ParameterExpression)); diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.SwitchExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.SwitchExpression.cs similarity index 60% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.SwitchExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.SwitchExpression.cs index 1266510..4512428 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.SwitchExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.SwitchExpression.cs @@ -3,12 +3,11 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { - private SwitchExpression SwitchExpression( - ExpressionType nodeType, System.Type type, JObject obj) + private SwitchExpression SwitchExpression( ExpressionType nodeType, System.Type type, JObject obj) { throw new NotImplementedException(); } diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.TryExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.TryExpression.cs similarity index 90% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.TryExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.TryExpression.cs index bf2043e..53ca82f 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.TryExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.TryExpression.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.TypeBinaryExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.TypeBinaryExpression.cs similarity index 95% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.TypeBinaryExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.TypeBinaryExpression.cs index 4b2353c..54955d6 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.TypeBinaryExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.TypeBinaryExpression.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { diff --git a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.UnaryExpression.cs b/Itminus.ExprSerDe/Deserializer/Deserializer.UnaryExpression.cs similarity index 98% rename from Aq.ExpressionJsonSerializer/Deserializer/Deserializer.UnaryExpression.cs rename to Itminus.ExprSerDe/Deserializer/Deserializer.UnaryExpression.cs index 5142e9d..7c8d5b0 100644 --- a/Aq.ExpressionJsonSerializer/Deserializer/Deserializer.UnaryExpression.cs +++ b/Itminus.ExprSerDe/Deserializer/Deserializer.UnaryExpression.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json.Linq; using Expr = System.Linq.Expressions.Expression; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Deserializer { diff --git a/Itminus.ExprSerDe/ExpressionJsonConverter.cs b/Itminus.ExprSerDe/ExpressionJsonConverter.cs new file mode 100644 index 0000000..def0f45 --- /dev/null +++ b/Itminus.ExprSerDe/ExpressionJsonConverter.cs @@ -0,0 +1,32 @@ +using System.Linq.Expressions; +using System.Reflection; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace Itminus.ExprSerializer +{ + public class ExpressionJsonConverter : JsonConverter + { + private static readonly System.Type TypeOfExpression = typeof (Expression); + + public ExpressionJsonConverter() + { + } + + public override bool CanConvert(System.Type objectType) + { + return objectType == TypeOfExpression || objectType.IsSubclassOf(TypeOfExpression); + } + + public override void WriteJson( JsonWriter writer, object value, JsonSerializer serializer) + { + Serializer.Serialize(writer, serializer, (Expression) value); + } + + public override object ReadJson( JsonReader reader, System.Type objectType, object existingValue, JsonSerializer serializer) + { + return Deserializer.Deserialize( JToken.ReadFrom(reader) ); + } + + } +} diff --git a/Itminus.ExprSerDe/Itminus.ExprSerDe.csproj b/Itminus.ExprSerDe/Itminus.ExprSerDe.csproj new file mode 100644 index 0000000..f2705dd --- /dev/null +++ b/Itminus.ExprSerDe/Itminus.ExprSerDe.csproj @@ -0,0 +1,16 @@ + + + + Library + netstandard2.0 + + + + + + + + + + + diff --git a/Aq.ExpressionJsonSerializer/Serializer.cs b/Itminus.ExprSerDe/Serializer.cs similarity index 96% rename from Aq.ExpressionJsonSerializer/Serializer.cs rename to Itminus.ExprSerDe/Serializer.cs index ea43f59..1120a87 100644 --- a/Aq.ExpressionJsonSerializer/Serializer.cs +++ b/Itminus.ExprSerDe/Serializer.cs @@ -4,14 +4,11 @@ using System.Reflection; using Newtonsoft.Json; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { internal sealed partial class Serializer { - public static void Serialize( - JsonWriter writer, - JsonSerializer serializer, - Expression expression) + public static void Serialize( JsonWriter writer, JsonSerializer serializer, Expression expression) { var s = new Serializer(writer, serializer); s.ExpressionInternal(expression); diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Binary.cs b/Itminus.ExprSerDe/Serializer/Serialization.Binary.cs similarity index 94% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Binary.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Binary.cs index 152fb0c..e986747 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Binary.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Binary.cs @@ -1,6 +1,6 @@ using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Block.cs b/Itminus.ExprSerDe/Serializer/Serialization.Block.cs similarity index 93% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Block.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Block.cs index 6d663ee..113ccec 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Block.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Block.cs @@ -1,6 +1,6 @@ using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Conditional.cs b/Itminus.ExprSerDe/Serializer/Serialization.Conditional.cs similarity index 93% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Conditional.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Conditional.cs index f524b01..c9010a5 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Conditional.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Conditional.cs @@ -1,6 +1,6 @@ using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Constant.cs b/Itminus.ExprSerDe/Serializer/Serialization.Constant.cs similarity index 95% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Constant.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Constant.cs index 7a6d773..d5b88ee 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Constant.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Constant.cs @@ -1,6 +1,6 @@ using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.DebugInfo.cs b/Itminus.ExprSerDe/Serializer/Serialization.DebugInfo.cs similarity index 89% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.DebugInfo.cs rename to Itminus.ExprSerDe/Serializer/Serialization.DebugInfo.cs index 0b2f57f..9058b33 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.DebugInfo.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.DebugInfo.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Default.cs b/Itminus.ExprSerDe/Serializer/Serialization.Default.cs similarity index 90% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Default.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Default.cs index f6f30ab..5605c18 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Default.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Default.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Dynamic.cs b/Itminus.ExprSerDe/Serializer/Serialization.Dynamic.cs similarity index 89% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Dynamic.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Dynamic.cs index 633015e..3c6e1c7 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Dynamic.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Dynamic.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Goto.cs b/Itminus.ExprSerDe/Serializer/Serialization.Goto.cs similarity index 94% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Goto.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Goto.cs index a3af78d..7937025 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Goto.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Goto.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Index.cs b/Itminus.ExprSerDe/Serializer/Serialization.Index.cs similarity index 93% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Index.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Index.cs index 4cf251c..9de1b89 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Index.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Index.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Invocation.cs b/Itminus.ExprSerDe/Serializer/Serialization.Invocation.cs similarity index 93% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Invocation.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Invocation.cs index d772153..aa37635 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Invocation.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Invocation.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Label.cs b/Itminus.ExprSerDe/Serializer/Serialization.Label.cs similarity index 89% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Label.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Label.cs index 9f6fe26..06c6dcd 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Label.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Label.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Lambda.cs b/Itminus.ExprSerDe/Serializer/Serialization.Lambda.cs similarity index 94% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Lambda.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Lambda.cs index 51b62ae..c937f67 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Lambda.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Lambda.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.ListInit.cs b/Itminus.ExprSerDe/Serializer/Serialization.ListInit.cs similarity index 89% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.ListInit.cs rename to Itminus.ExprSerDe/Serializer/Serialization.ListInit.cs index d5bb201..d048692 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.ListInit.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.ListInit.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Loop.cs b/Itminus.ExprSerDe/Serializer/Serialization.Loop.cs similarity index 96% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Loop.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Loop.cs index 92554be..72e2742 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Loop.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Loop.cs @@ -3,7 +3,7 @@ using System.Linq.Expressions; using System.Reflection.Emit; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Member.cs b/Itminus.ExprSerDe/Serializer/Serialization.Member.cs similarity index 92% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Member.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Member.cs index 30f2db9..0ce6498 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Member.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Member.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.MemberInit.cs b/Itminus.ExprSerDe/Serializer/Serialization.MemberInit.cs similarity index 89% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.MemberInit.cs rename to Itminus.ExprSerDe/Serializer/Serialization.MemberInit.cs index 94835ca..3c246c1 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.MemberInit.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.MemberInit.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.MethodCall.cs b/Itminus.ExprSerDe/Serializer/Serialization.MethodCall.cs similarity index 93% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.MethodCall.cs rename to Itminus.ExprSerDe/Serializer/Serialization.MethodCall.cs index 6f50cf1..0401f48 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.MethodCall.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.MethodCall.cs @@ -1,6 +1,6 @@ using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.New.cs b/Itminus.ExprSerDe/Serializer/Serialization.New.cs similarity index 94% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.New.cs rename to Itminus.ExprSerDe/Serializer/Serialization.New.cs index 8f0aa89..5fd36e3 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.New.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.New.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.NewArray.cs b/Itminus.ExprSerDe/Serializer/Serialization.NewArray.cs similarity index 93% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.NewArray.cs rename to Itminus.ExprSerDe/Serializer/Serialization.NewArray.cs index 92889b6..0926bd9 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.NewArray.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.NewArray.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Parameter.cs b/Itminus.ExprSerDe/Serializer/Serialization.Parameter.cs similarity index 95% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Parameter.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Parameter.cs index e2c0db2..908515b 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Parameter.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Parameter.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.RuntimeVariables.cs b/Itminus.ExprSerDe/Serializer/Serialization.RuntimeVariables.cs similarity index 92% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.RuntimeVariables.cs rename to Itminus.ExprSerDe/Serializer/Serialization.RuntimeVariables.cs index c65fd43..f4f8032 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.RuntimeVariables.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.RuntimeVariables.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Switch.cs b/Itminus.ExprSerDe/Serializer/Serialization.Switch.cs similarity index 89% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Switch.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Switch.cs index ce5e8b2..07cb289 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Switch.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Switch.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Try.cs b/Itminus.ExprSerDe/Serializer/Serialization.Try.cs similarity index 89% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Try.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Try.cs index 78a28ae..8c1f73b 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Try.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Try.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.TypeBinary.cs b/Itminus.ExprSerDe/Serializer/Serialization.TypeBinary.cs similarity index 93% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.TypeBinary.cs rename to Itminus.ExprSerDe/Serializer/Serialization.TypeBinary.cs index f062690..2dbd83d 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.TypeBinary.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.TypeBinary.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Unary.cs b/Itminus.ExprSerDe/Serializer/Serialization.Unary.cs similarity index 92% rename from Aq.ExpressionJsonSerializer/Serializer/Serialization.Unary.cs rename to Itminus.ExprSerDe/Serializer/Serialization.Unary.cs index 24bb68a..c868ab0 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serialization.Unary.cs +++ b/Itminus.ExprSerDe/Serializer/Serialization.Unary.cs @@ -1,7 +1,7 @@ using System; using System.Linq.Expressions; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { diff --git a/Aq.ExpressionJsonSerializer/Serializer/Serializer.Reflection.cs b/Itminus.ExprSerDe/Serializer/Serializer.Reflection.cs similarity index 87% rename from Aq.ExpressionJsonSerializer/Serializer/Serializer.Reflection.cs rename to Itminus.ExprSerDe/Serializer/Serializer.Reflection.cs index a542755..dad706f 100644 --- a/Aq.ExpressionJsonSerializer/Serializer/Serializer.Reflection.cs +++ b/Itminus.ExprSerDe/Serializer/Serializer.Reflection.cs @@ -2,12 +2,11 @@ using System.Collections.Generic; using System.Reflection; -namespace Aq.ExpressionJsonSerializer +namespace Itminus.ExprSerializer { partial class Serializer { - private static readonly Dictionary> - TypeCache = new Dictionary>(); + private static readonly Dictionary TypeCache = new Dictionary(); private Action Type(Type type) { @@ -20,19 +19,15 @@ private void TypeInternal(Type type) this._writer.WriteNull(); } else { - Tuple tuple; + (string, string, Type[]) tuple; if (!TypeCache.TryGetValue(type, out tuple)) { var assemblyName = type.Assembly.FullName; if (type.IsGenericType) { var def = type.GetGenericTypeDefinition(); - tuple = new Tuple( - def.Assembly.FullName, def.FullName, - type.GetGenericArguments() - ); + tuple = ( def.Assembly.FullName, def.FullName, type.GetGenericArguments() ); } else { - tuple = new Tuple( - assemblyName, type.FullName, null); + tuple = ( assemblyName, type.AssemblyQualifiedName, null); } TypeCache[type] = tuple; } From a8a4d1d00802c9fdc1eed074d593e548d5cccda3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=20=E6=96=B0=E8=B7=AF?= Date: Fri, 14 May 2021 11:36:07 +0800 Subject: [PATCH 2/2] update readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 78131fb..11267e8 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,6 @@ expression-json-serializer ========================== Expression serializer for JSON.NET + + +This is a fork of [aquilae/expression-json-serializer](https://github.com/aquilae/expression-json-serializer) \ No newline at end of file