Skip to content

Commit a28dbc0

Browse files
committed
feat: add support for dotnet 9
BREAKING CHANGE: remove BinaryFormatterSerializer as it uses BinarySerializer
1 parent dfbbad2 commit a28dbc0

11 files changed

+38
-281
lines changed

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ This library is useful in scenarios where you need to send LINQ expressions over
99
- Supports various types of expressions, including binary, unary, member access, lambda, and more.
1010
- Extensible design that allows you to add support for custom expressions.
1111

12+
## Breaking Changes
13+
14+
### Version 4.0
15+
16+
- **BinaryFormatSerializer** has been removed due to security concerns with `BinaryFormatter`. For more details, see the [BinaryFormatter Security Guide](https://aka.ms/binaryformatter).
17+
18+
1219
## Getting Started
1320

1421
### Installation
@@ -53,6 +60,7 @@ Serialize.Linq has a comprehensive test suite. You can run the tests using your
5360

5461
## Supported Platforms (or known to work with)
5562

63+
- .NET 9.0
5664
- .NET 8.0
5765
- .NET 7.0
5866
- .NET 6.0

appveyor.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: 3.1.{build}
1+
version: 4.0.{build}
22
configuration:
33
- Release
44
image: Visual Studio 2022

src/Serialize.Linq.Tests/ExpressionSerializerTests.cs

+3-26
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,6 @@ public void SerializeDeserializeGuidValueAsXml()
168168
SerializeDeserializeExpressionAsText(CreateGuidExpression(), new XmlSerializer());
169169
}
170170

171-
[TestMethod]
172-
public void SerializeDeserializeGuidValueAsBinary()
173-
{
174-
SerializeDeserializeExpressionAsBinary(CreateGuidExpression(), new BinarySerializer());
175-
}
176-
177171
[TestMethod]
178172
public void ExpressionWithConstantDateTimeAsJson()
179173
{
@@ -186,12 +180,6 @@ public void ExpressionWithConstantDateTimeAsXml()
186180
SerializeDeserializeExpressionAsText(CreateConstantDateTimeExpression(), new XmlSerializer());
187181
}
188182

189-
[TestMethod]
190-
public void ExpressionWithConstantDateTimeOffsetAsBinary()
191-
{
192-
SerializeDeserializeExpressionAsBinary(CreateConstantDateTimeOffsetExpression(), new BinarySerializer());
193-
}
194-
195183
[TestMethod]
196184
public void ExpressionWithConstantDateTimeOffsetAsJson()
197185
{
@@ -204,12 +192,6 @@ public void ExpressionWithConstantDateTimeOffsetAsXml()
204192
SerializeDeserializeExpressionAsText(CreateConstantDateTimeOffsetExpression(), new XmlSerializer());
205193
}
206194

207-
[TestMethod]
208-
public void ExpressionWithConstantDateTimeAsBinary()
209-
{
210-
SerializeDeserializeExpressionAsBinary(CreateConstantDateTimeExpression(), new BinarySerializer());
211-
}
212-
213195
[TestMethod]
214196
public void ExpressionWithConstantTypeAsJson()
215197
{
@@ -222,12 +204,6 @@ public void ExpressionWithConstantTypeAsXml()
222204
SerializeDeserializeExpressionAsText(CreateConstantTypeExpression(), new XmlSerializer());
223205
}
224206

225-
[TestMethod]
226-
public void ExpressionWithConstantTypeAsBinary()
227-
{
228-
SerializeDeserializeExpressionAsBinary(CreateConstantTypeExpression(), new BinarySerializer());
229-
}
230-
231207
private static ConstantExpression CreateConstantDateTimeExpression()
232208
{
233209
return Expression.Constant(DateTime.Today);
@@ -267,12 +243,13 @@ private static Expression SerializeDeserializeExpressionAsBinary(Expression expr
267243

268244
private static IEnumerable<ITextSerializer> CreateTextSerializers()
269245
{
270-
return new ITextSerializer[] { new JsonSerializer(), new XmlSerializer() };
246+
yield return new JsonSerializer();
247+
yield return new XmlSerializer();
271248
}
272249

273250
private static IEnumerable<IBinarySerializer> CreateBinarySerializers()
274251
{
275-
return new IBinarySerializer[] { new BinarySerializer(), new BinaryFormatterSerializer() };
252+
yield break;
276253
}
277254
}
278255
}

src/Serialize.Linq.Tests/Internals/BinaryFormatterSerializer.cs

-50
This file was deleted.

src/Serialize.Linq.Tests/Issues/Issue105.cs

-23
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,6 @@ public class Test
1818
public Guid Id { get; set; }
1919
}
2020

21-
[TestMethod]
22-
public void SerializeDeserializeListAsBinary()
23-
{
24-
var guid1 = Guid.NewGuid();
25-
var guid2 = Guid.NewGuid();
26-
var guid3 = Guid.NewGuid();
27-
var list = new List<Guid> { guid1, guid2 };
28-
Expression<Func<Test, bool>> expression = test => list.Contains(test.Id);
29-
30-
var serializer = new ExpressionSerializer(new BinarySerializer())
31-
{
32-
AutoAddKnownTypesAsListTypes = true
33-
};
34-
var value = serializer.SerializeBinary(expression);
35-
36-
var actualExpression = (Expression<Func<Test, bool>>)serializer.DeserializeBinary(value);
37-
var func = actualExpression.Compile();
38-
39-
Assert.IsTrue(func(new Test { Id = guid1 }), "one failed.");
40-
Assert.IsTrue(func(new Test { Id = guid2 }), "two failed.");
41-
Assert.IsFalse(func(new Test { Id = guid3 }), "three failed.");
42-
}
43-
4421
[TestMethod]
4522
public void SerializeDeserializeListAsJson()
4623
{

src/Serialize.Linq.Tests/Issues/Issue38.cs

-53
This file was deleted.

src/Serialize.Linq.Tests/Issues/Issue50.cs

-44
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,6 @@ public void SerializeArrayAsJson()
2525
Assert.IsNotNull(value);
2626
}
2727

28-
[TestMethod]
29-
public void SerializeArrayAsBinary()
30-
{
31-
var list = new[] { "one", "two" };
32-
Expression<Func<Test, bool>> expression = test => list.Contains(test.Code);
33-
34-
var serializer = new ExpressionSerializer(new BinarySerializer());
35-
var value = serializer.SerializeBinary(expression);
36-
37-
Assert.IsNotNull(value);
38-
}
39-
4028
[TestMethod]
4129
public void SerializeListAsJson()
4230
{
@@ -52,21 +40,6 @@ public void SerializeListAsJson()
5240
Assert.IsNotNull(value);
5341
}
5442

55-
[TestMethod]
56-
public void SerializeListAsBinary()
57-
{
58-
var list = new List<string> { "one", "two" };
59-
Expression<Func<Test, bool>> expression = test => list.Contains(test.Code);
60-
61-
var serializer = new ExpressionSerializer(new BinarySerializer())
62-
{
63-
AutoAddKnownTypesAsListTypes = true
64-
};
65-
var value = serializer.SerializeBinary(expression);
66-
67-
Assert.IsNotNull(value);
68-
}
69-
7043
[TestMethod]
7144
public void SerializeDeserializeArrayAsJson()
7245
{
@@ -85,23 +58,6 @@ public void SerializeDeserializeArrayAsJson()
8558
Assert.IsFalse(func(new Test { Code = "three" }), "three failed.");
8659
}
8760

88-
[TestMethod]
89-
public void SerializeDeserializeArrayAsBinary()
90-
{
91-
var list = new[] { "one", "two" };
92-
Expression<Func<Test, bool>> expression = test => list.Contains(test.Code);
93-
94-
var serializer = new ExpressionSerializer(new BinarySerializer());
95-
var value = serializer.SerializeBinary(expression);
96-
97-
var actualExpression = (Expression<Func<Test, bool>>)serializer.DeserializeBinary(value);
98-
var func = actualExpression.Compile();
99-
100-
Assert.IsTrue(func(new Test { Code = "one" }), "one failed.");
101-
Assert.IsTrue(func(new Test { Code = "two" }), "two failed.");
102-
Assert.IsFalse(func(new Test { Code = "three" }), "three failed.");
103-
}
104-
10561
public class Test
10662
{
10763
public string Code { get; set; }

src/Serialize.Linq.Tests/Issues/Issue96.cs

-20
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,6 @@ public class Test
1717
public string Code { get; set; }
1818
}
1919

20-
[TestMethod]
21-
public void SerializeDeserializeListAsBinary()
22-
{
23-
var list = new List<string> { "one", "two" };
24-
Expression<Func<Test, bool>> expression = test => list.Contains(test.Code);
25-
26-
var serializer = new ExpressionSerializer(new BinarySerializer())
27-
{
28-
AutoAddKnownTypesAsListTypes = true
29-
};
30-
var value = serializer.SerializeBinary(expression);
31-
32-
var actualExpression = (Expression<Func<Test, bool>>)serializer.DeserializeBinary(value);
33-
var func = actualExpression.Compile();
34-
35-
Assert.IsTrue(func(new Test { Code = "one" }), "one failed.");
36-
Assert.IsTrue(func(new Test { Code = "two" }), "two failed.");
37-
Assert.IsFalse(func(new Test { Code = "three" }), "three failed.");
38-
}
39-
4020
[TestMethod]
4121
public void SerializeDeserializeListAsJson()
4222
{

src/Serialize.Linq.Tests/Serialize.Linq.Tests.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
4+
<TargetFramework>net9.0</TargetFramework>
55

66
<IsPackable>false</IsPackable>
77

src/Serialize.Linq/Serialize.Linq.csproj

+25-8
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@
55
<AssemblyTitle>Serialize.Linq</AssemblyTitle>
66
<AssemblyName>Serialize.Linq</AssemblyName>
77
<Authors>Sascha Kiefer</Authors>
8-
<Copyright>Copyright © 2012-2023</Copyright>
8+
<Copyright>Copyright © 2012-2025</Copyright>
99
<AssemblyOriginatorKeyFile>Serialize.Linq Signing Key.snk</AssemblyOriginatorKeyFile>
1010
<SignAssembly>true</SignAssembly>
1111
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
1212
<PackageTags>linq;serialize</PackageTags>
1313
<PackageReleaseNotes>
14-
- support for .NET 8.0
15-
- support for .NET 4.8.1
16-
- drop support for .NET 5.0
14+
- support for .NET 9.0
15+
- remove BinarySerializer
1716
</PackageReleaseNotes>
1817
<PackageProjectUrl>https://github.com/esskar/Serialize.Linq</PackageProjectUrl>
1918
<PackageLicenseUrl></PackageLicenseUrl>
@@ -30,10 +29,10 @@
3029
</PropertyGroup>
3130

3231
<PropertyGroup>
33-
<TargetFrameworks>net48;net481;net6.0;net7.0;net8.0;netstandard2.0;netstandard2.1</TargetFrameworks>
34-
<Version>3.1.0</Version>
35-
<AssemblyVersion>3.1.0.0</AssemblyVersion>
36-
<FileVersion>3.1.0.0</FileVersion>
32+
<TargetFrameworks>net48;net481;net6.0;net7.0;net8.0;net9.0;netstandard2.0;netstandard2.1</TargetFrameworks>
33+
<Version>4.0.0</Version>
34+
<AssemblyVersion>4.0.0.0</AssemblyVersion>
35+
<FileVersion>4.0.0.0</FileVersion>
3736
<PackageLicenseFile>LICENSE</PackageLicenseFile>
3837
</PropertyGroup>
3938

@@ -140,6 +139,21 @@
140139
<WarningLevel>7</WarningLevel>
141140
</PropertyGroup>
142141

142+
<PropertyGroup
143+
Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net9.0|AnyCPU'">
144+
<WarningLevel>7</WarningLevel>
145+
</PropertyGroup>
146+
147+
<PropertyGroup
148+
Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug Optimize Size|net9.0|AnyCPU'">
149+
<WarningLevel>7</WarningLevel>
150+
</PropertyGroup>
151+
152+
<PropertyGroup
153+
Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release Optimize Size|net9.0|AnyCPU'">
154+
<WarningLevel>7</WarningLevel>
155+
</PropertyGroup>
156+
143157
<ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
144158
</ItemGroup>
145159

@@ -149,6 +163,9 @@
149163
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
150164
</ItemGroup>
151165

166+
<ItemGroup Condition=" '$(TargetFramework)' == 'net9.0' ">
167+
</ItemGroup>
168+
152169
<ItemGroup>
153170
<None Include="..\..\LICENSE" Pack="true" PackagePath="" />
154171
<None Include="..\..\README.md" Pack="true" PackagePath="\" />

0 commit comments

Comments
 (0)