Skip to content

Commit

Permalink
-Changed netstandard1.1 to netstandard1.3
Browse files Browse the repository at this point in the history
-Added support for ISerializable interface to netstandard1.3+
-Added support for SerializableAttribute and NonSerializedAttribute to netstandard1.3+
  • Loading branch information
JamesNK committed Mar 5, 2017
1 parent b9ef3ad commit febdb81
Show file tree
Hide file tree
Showing 31 changed files with 502 additions and 268 deletions.
97 changes: 49 additions & 48 deletions Build/Newtonsoft.Json.nuspec
Expand Up @@ -17,56 +17,57 @@
<group targetFramework=".NETFramework3.5" />
<group targetFramework=".NETFramework2.0" />
<group targetFramework=".NETPortable4.5-Profile259" />
<group targetFramework=".NETStandard1.1">
<dependency id="Microsoft.CSharp" version="4.0.1" />
<dependency id="System.Collections" version="4.0.11" />
<dependency id="System.ComponentModel.TypeConverter" version="4.1.0" />
<dependency id="System.Diagnostics.Debug" version="4.0.11" />
<dependency id="System.Dynamic.Runtime" version="4.0.11" />
<dependency id="System.Globalization" version="4.0.11" />
<dependency id="System.IO" version="4.1.0" />
<dependency id="System.Linq" version="4.1.0" />
<dependency id="System.Linq.Expressions" version="4.1.0" />
<dependency id="System.ObjectModel" version="4.0.12" />
<dependency id="System.Reflection" version="4.1.0" />
<dependency id="System.Reflection.Extensions" version="4.0.1" />
<dependency id="System.Resources.ResourceManager" version="4.0.1" />
<dependency id="System.Runtime" version="4.1.0" />
<dependency id="System.Runtime.Extensions" version="4.1.0" />
<dependency id="System.Runtime.Numerics" version="4.0.1" />
<dependency id="System.Runtime.Serialization.Primitives" version="4.1.1" />
<dependency id="System.Text.Encoding" version="4.0.11" />
<dependency id="System.Text.Encoding.Extensions" version="4.0.11" />
<dependency id="System.Text.RegularExpressions" version="4.1.0" />
<dependency id="System.Threading" version="4.0.11" />
<dependency id="System.Threading.Tasks" version="4.0.11" />
<dependency id="System.Xml.ReaderWriter" version="4.0.11" />
<dependency id="System.Xml.XDocument" version="4.0.11" />
<group targetFramework=".NETStandard1.3">
<dependency id="Microsoft.CSharp" version="4.3.0" />
<dependency id="System.Collections" version="4.3.0" />
<dependency id="System.ComponentModel.TypeConverter" version="4.3.0" />
<dependency id="System.Diagnostics.Debug" version="4.3.0" />
<dependency id="System.Dynamic.Runtime" version="4.3.0" />
<dependency id="System.Globalization" version="4.3.0" />
<dependency id="System.IO" version="4.3.0" />
<dependency id="System.Linq" version="4.3.0" />
<dependency id="System.Linq.Expressions" version="4.3.0" />
<dependency id="System.ObjectModel" version="4.3.0" />
<dependency id="System.Reflection" version="4.3.0" />
<dependency id="System.Reflection.Extensions" version="4.3.0" />
<dependency id="System.Resources.ResourceManager" version="4.3.0" />
<dependency id="System.Runtime" version="4.3.0" />
<dependency id="System.Runtime.Extensions" version="4.3.0" />
<dependency id="System.Runtime.Numerics" version="4.3.0" />
<dependency id="System.Runtime.Serialization.Formatters" version="4.3.0" />
<dependency id="System.Runtime.Serialization.Primitives" version="4.3.0" />
<dependency id="System.Text.Encoding" version="4.3.0" />
<dependency id="System.Text.Encoding.Extensions" version="4.3.0" />
<dependency id="System.Text.RegularExpressions" version="4.3.0" />
<dependency id="System.Threading" version="4.3.0" />
<dependency id="System.Threading.Tasks" version="4.3.0" />
<dependency id="System.Xml.ReaderWriter" version="4.3.0" />
<dependency id="System.Xml.XDocument" version="4.3.0" />
</group>
<group targetFramework=".NETStandard1.0">
<dependency id="Microsoft.CSharp" version="4.0.1" />
<dependency id="System.Collections" version="4.0.11" />
<dependency id="System.ComponentModel.TypeConverter" version="4.1.0" />
<dependency id="System.Diagnostics.Debug" version="4.0.11" />
<dependency id="System.Dynamic.Runtime" version="4.0.11" />
<dependency id="System.Globalization" version="4.0.11" />
<dependency id="System.IO" version="4.1.0" />
<dependency id="System.Linq" version="4.1.0" />
<dependency id="System.Linq.Expressions" version="4.1.0" />
<dependency id="System.ObjectModel" version="4.0.12" />
<dependency id="System.Reflection" version="4.1.0" />
<dependency id="System.Reflection.Extensions" version="4.0.1" />
<dependency id="System.Resources.ResourceManager" version="4.0.1" />
<dependency id="System.Runtime" version="4.1.0" />
<dependency id="System.Runtime.Extensions" version="4.1.0" />
<dependency id="System.Runtime.Serialization.Primitives" version="4.1.1" />
<dependency id="System.Text.Encoding" version="4.0.11" />
<dependency id="System.Text.Encoding.Extensions" version="4.0.11" />
<dependency id="System.Text.RegularExpressions" version="4.1.0" />
<dependency id="System.Threading" version="4.0.11" />
<dependency id="System.Threading.Tasks" version="4.0.11" />
<dependency id="System.Xml.ReaderWriter" version="4.0.11" />
<dependency id="System.Xml.XDocument" version="4.0.11" />
<dependency id="Microsoft.CSharp" version="4.3.0" />
<dependency id="System.Collections" version="4.3.0" />
<dependency id="System.ComponentModel.TypeConverter" version="4.3.0" />
<dependency id="System.Diagnostics.Debug" version="4.3.0" />
<dependency id="System.Dynamic.Runtime" version="4.3.0" />
<dependency id="System.Globalization" version="4.3.0" />
<dependency id="System.IO" version="4.3.0" />
<dependency id="System.Linq" version="4.3.0" />
<dependency id="System.Linq.Expressions" version="4.3.0" />
<dependency id="System.ObjectModel" version="4.3.0" />
<dependency id="System.Reflection" version="4.3.0" />
<dependency id="System.Reflection.Extensions" version="4.3.0" />
<dependency id="System.Resources.ResourceManager" version="4.3.0" />
<dependency id="System.Runtime" version="4.3.0" />
<dependency id="System.Runtime.Extensions" version="4.3.0" />
<dependency id="System.Runtime.Serialization.Primitives" version="4.3.0" />
<dependency id="System.Text.Encoding" version="4.3.0" />
<dependency id="System.Text.Encoding.Extensions" version="4.3.0" />
<dependency id="System.Text.RegularExpressions" version="4.3.0" />
<dependency id="System.Threading" version="4.3.0" />
<dependency id="System.Threading.Tasks" version="4.3.0" />
<dependency id="System.Xml.ReaderWriter" version="4.3.0" />
<dependency id="System.Xml.XDocument" version="4.3.0" />
</group>
</dependencies>
</metadata>
Expand Down
2 changes: 1 addition & 1 deletion Build/build.ps1
Expand Up @@ -24,7 +24,7 @@
$workingSourceDir = "$workingDir\Src"
$nugetPath = "$buildDir\nuget.exe"
$builds = @(
@{Name = "Newtonsoft.Json.Roslyn"; TestsName = "Newtonsoft.Json.Tests.Roslyn"; BuildFunction = "NetCliBuild"; TestsFunction = "NetCliTests"; NuGetDir = "netstandard1.0,netstandard1.1"; Framework=$null; Enabled=$true},
@{Name = "Newtonsoft.Json.Roslyn"; TestsName = "Newtonsoft.Json.Tests.Roslyn"; BuildFunction = "NetCliBuild"; TestsFunction = "NetCliTests"; NuGetDir = "netstandard1.0,netstandard1.3"; Framework=$null; Enabled=$true},
@{Name = "Newtonsoft.Json"; TestsName = "Newtonsoft.Json.Tests"; BuildFunction = "MSBuildBuild"; TestsFunction = "NUnitTests"; NuGetDir = "net45"; Framework="net-4.0"; Enabled=$true},
@{Name = "Newtonsoft.Json.Portable"; TestsName = "Newtonsoft.Json.Tests.Portable"; BuildFunction = "MSBuildBuild"; TestsFunction = "NUnitTests"; NuGetDir = "portable-net45+win8+wpa81+wp8"; Framework="net-4.0"; Enabled=$true},
@{Name = "Newtonsoft.Json.Net40"; TestsName = "Newtonsoft.Json.Tests.Net40"; BuildFunction = "MSBuildBuild"; TestsFunction = "NUnitTests"; NuGetDir = "net40"; Framework="net-4.0"; Enabled=$true},
Expand Down
3 changes: 2 additions & 1 deletion Src/Newtonsoft.Json.Tests/Linq/JTokenTests.cs
Expand Up @@ -239,7 +239,6 @@ public void BeforeAfter()

Assert.AreEqual(5, (int)a[1].Previous);
Assert.AreEqual(2, a[2].BeforeSelf().Count());
//Assert.AreEqual(2, a[2].AfterSelf().Count());
}

[Test]
Expand Down Expand Up @@ -316,6 +315,8 @@ public void Casting()
Assert.AreEqual(true, (bool)(new JValue(1.0)));
Assert.AreEqual(true, (bool)(new JValue("true")));
Assert.AreEqual(true, (bool)(new JValue(true)));
Assert.AreEqual(true, (bool)(new JValue(2)));
Assert.AreEqual(false, (bool)(new JValue(0)));
Assert.AreEqual(1, (int)(new JValue(1)));
Assert.AreEqual(1, (int)(new JValue(1.0)));
Assert.AreEqual(1, (int)(new JValue("1")));
Expand Down
15 changes: 8 additions & 7 deletions Src/Newtonsoft.Json.Tests/Newtonsoft.Json.Tests.Roslyn.csproj
Expand Up @@ -97,15 +97,16 @@
<DefineConstants>NET20;$(AdditionalConstants)</DefineConstants>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)'=='netcoreapp1.0'">
<PackageReference Include="FSharp.Core" Version="4.0.1.7-alpha" />
<PackageReference Include="System.Runtime.Serialization.Primitives" Version="4.1.1" />
<PackageReference Include="System.Runtime.Serialization.Xml" Version="4.1.1" />
<PackageReference Include="System.Xml.XmlSerializer" Version="4.0.11" />
<PackageReference Include="FSharp.Core" Version="4.1.0" />
<PackageReference Include="System.Runtime.Serialization.Primitives" Version="4.3.0" />
<PackageReference Include="System.Runtime.Serialization.Xml" Version="4.3.0" />
<PackageReference Include="System.Runtime.Serialization.Formatters" Version="4.3.0" />
<PackageReference Include="System.Xml.XmlSerializer" Version="4.3.0" />
<PackageReference Include="System.ValueTuple" Version="4.3.0" />

<PackageReference Include="xunit" Version="2.2.0-*" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0-beta5-build1225" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-*" />
<PackageReference Include="xunit" Version="2.2.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
</ItemGroup>
<ItemGroup>
<!-- Tracking for removal https://github.com/Microsoft/vstest/issues/472 -->
Expand Down
75 changes: 40 additions & 35 deletions Src/Newtonsoft.Json.Tests/Schema/JsonSchemaGeneratorTests.cs
Expand Up @@ -49,8 +49,8 @@
using Newtonsoft.Json.Utilities.LinqBridge;
#else
using System.Linq;

#endif
using Newtonsoft.Json.Tests.Serialization;

namespace Newtonsoft.Json.Tests.Schema
{
Expand Down Expand Up @@ -312,14 +312,14 @@ public void GenerateSchemaForType()
Assert.IsTrue(v.IsValid(schema));
}

#if !(PORTABLE || DNXCORE50 || PORTABLE40)
#if !(PORTABLE || DNXCORE50 || PORTABLE40) || NETSTANDARD1_1
[Test]
public void GenerateSchemaForISerializable()
{
JsonSchemaGenerator generator = new JsonSchemaGenerator();
generator.UndefinedSchemaIdHandling = UndefinedSchemaIdHandling.UseTypeName;

JsonSchema schema = generator.Generate(typeof(Exception));
JsonSchema schema = generator.Generate(typeof(ISerializableTestObject));

Assert.AreEqual(JsonSchemaType.Object, schema.Type);
Assert.AreEqual(true, schema.AllowAdditionalProperties);
Expand All @@ -338,7 +338,9 @@ public void GenerateSchemaForDBNull()

Assert.AreEqual(JsonSchemaType.Null, schema.Type);
}
#endif

#if !(PORTABLE || DNXCORE50 || PORTABLE40) || NETSTANDARD1_1
public class CustomDirectoryInfoMapper : DefaultContractResolver
{
public CustomDirectoryInfoMapper()
Expand Down Expand Up @@ -477,7 +479,7 @@ public void GenerateSchemaCamelCase()
generator.UndefinedSchemaIdHandling = UndefinedSchemaIdHandling.UseTypeName;
generator.ContractResolver = new CamelCasePropertyNamesContractResolver()
{
#if !(PORTABLE || DNXCORE50 || PORTABLE40)
#if !(PORTABLE || DNXCORE50 || PORTABLE40) || NETSTANDARD1_1
IgnoreSerializableAttribute = true
#endif
};
Expand Down Expand Up @@ -522,73 +524,62 @@ public void GenerateSchemaCamelCase()
}", json);
}

#if !(PORTABLE || DNXCORE50 || PORTABLE40)
#if !(PORTABLE || DNXCORE50 || PORTABLE40) || NETSTANDARD1_1
[Test]
public void GenerateSchemaSerializable()
{
JsonSchemaGenerator generator = new JsonSchemaGenerator();
generator.ContractResolver = new DefaultContractResolver

DefaultContractResolver contractResolver = new DefaultContractResolver
{
IgnoreSerializableAttribute = false
};

generator.ContractResolver = contractResolver;
generator.UndefinedSchemaIdHandling = UndefinedSchemaIdHandling.UseTypeName;

JsonSchema schema = generator.Generate(typeof(Version), true);
JsonSchema schema = generator.Generate(typeof(SerializableTestObject), true);

string json = schema.ToString();

StringAssert.AreEqual(@"{
""id"": ""System.Version"",
""id"": ""Newtonsoft.Json.Tests.Schema.SerializableTestObject"",
""type"": [
""object"",
""null""
],
""additionalProperties"": false,
""properties"": {
""_Major"": {
""_name"": {
""required"": true,
""type"": ""integer""
},
""_Minor"": {
""required"": true,
""type"": ""integer""
},
""_Build"": {
""required"": true,
""type"": ""integer""
},
""_Revision"": {
""required"": true,
""type"": ""integer""
""type"": [
""string"",
""null""
]
}
}
}", json);

JTokenWriter jsonWriter = new JTokenWriter();
JsonSerializer serializer = new JsonSerializer();
serializer.ContractResolver = new DefaultContractResolver
serializer.ContractResolver = contractResolver;
serializer.Serialize(jsonWriter, new SerializableTestObject
{
IgnoreSerializableAttribute = false
};
serializer.Serialize(jsonWriter, new Version(1, 2, 3, 4));
Name = "Name!"
});


List<string> errors = new List<string>();
jsonWriter.Token.Validate(schema, (sender, args) => errors.Add(args.Message));

Assert.AreEqual(0, errors.Count);

StringAssert.AreEqual(@"{
""_Major"": 1,
""_Minor"": 2,
""_Build"": 3,
""_Revision"": 4
""_name"": ""Name!""
}", jsonWriter.Token.ToString());

Version version = jsonWriter.Token.ToObject<Version>(serializer);
Assert.AreEqual(1, version.Major);
Assert.AreEqual(2, version.Minor);
Assert.AreEqual(3, version.Build);
Assert.AreEqual(4, version.Revision);
SerializableTestObject c = jsonWriter.Token.ToObject<SerializableTestObject>(serializer);
Assert.AreEqual("Name!", c.Name);
}
#endif

Expand Down Expand Up @@ -845,6 +836,20 @@ public class BulkInsertTaskCollection : List<BulkInsertTask_DSL>
public class BulkInsertTask_DSL
{
}

#if !(PORTABLE || DNXCORE50 || PORTABLE40) || NETSTANDARD1_1
[Serializable]
public sealed class SerializableTestObject
{
private string _name;

public string Name
{
get { return _name; }
set { _name = value; }
}
}
#endif
}

#pragma warning restore 618
25 changes: 24 additions & 1 deletion Src/Newtonsoft.Json.Tests/Serialization/ContractResolverTests.cs
Expand Up @@ -109,12 +109,35 @@ public class AddressWithDataMember
#if !NET20
[DataMember(Name = "CustomerAddress1")]
#endif
public string AddressLine1 { get; set; }
public string AddressLine1 { get; set; }
}

[TestFixture]
public class ContractResolverTests : TestFixtureBase
{
#if !(PORTABLE) || NETSTANDARD1_1
[Test]
public void ResolveSerializableContract()
{
DefaultContractResolver contractResolver = new DefaultContractResolver();
JsonContract contract = contractResolver.ResolveContract(typeof(ISerializableTestObject));

Assert.AreEqual(JsonContractType.Serializable, contract.ContractType);
}

[Test]
public void ResolveObjectContractWithFieldsSerialization()
{
DefaultContractResolver contractResolver = new DefaultContractResolver
{
IgnoreSerializableAttribute = false
};
JsonObjectContract contract = (JsonObjectContract)contractResolver.ResolveContract(typeof(AnswerFilterModel));

Assert.AreEqual(MemberSerialization.Fields, contract.MemberSerialization);
}
#endif

[Test]
public void JsonPropertyDefaultValue()
{
Expand Down

0 comments on commit febdb81

Please sign in to comment.