diff --git a/JSONAPI.Tests/Data/AttributeSerializationTest.json b/JSONAPI.Tests/Data/AttributeSerializationTest.json
new file mode 100644
index 00000000..1a4fa932
--- /dev/null
+++ b/JSONAPI.Tests/Data/AttributeSerializationTest.json
@@ -0,0 +1,75 @@
+{
+ "samples": [
+ {
+ "id": "1",
+ "booleanField": false,
+ "nullableBooleanField": false,
+ "sByteField": 0,
+ "nullableSByteField": null,
+ "byteField": 0,
+ "nullableByteField": null,
+ "int16Field": 0,
+ "nullableInt16Field": null,
+ "uInt16Field": 0,
+ "nullableUInt16Field": null,
+ "int32Field": 0,
+ "nullableInt32Field": null,
+ "uInt32Field": 0,
+ "nullableUInt32Field": null,
+ "int64Field": 0,
+ "nullableInt64Field": null,
+ "uInt64Field": 0,
+ "nullableUInt64Field": null,
+ "doubleField": 0.0,
+ "nullableDoubleField": null,
+ "singleField": 0.0,
+ "nullableSingleField": null,
+ "decimalField": "0",
+ "nullableDecimalField": null,
+ "dateTimeField": "0001-01-01T00:00:00",
+ "nullableDateTimeField": null,
+ "dateTimeOffsetField": "0001-01-01T00:00:00+00:00",
+ "nullableDateTimeOffsetField": null,
+ "guidField": "00000000-0000-0000-0000-000000000000",
+ "nullableGuidField": null,
+ "stringField": null,
+ "enumField": 0,
+ "nullableEnumField": null
+ }, {
+ "id": "2",
+ "booleanField": true,
+ "nullableBooleanField": true,
+ "sByteField": 123,
+ "nullableSByteField": 123,
+ "byteField": 253,
+ "nullableByteField": 253,
+ "int16Field": 32000,
+ "nullableInt16Field": 32000,
+ "uInt16Field": 64000,
+ "nullableUInt16Field": 64000,
+ "int32Field": 2000000000,
+ "nullableInt32Field": 2000000000,
+ "uInt32Field": 3000000000,
+ "nullableUInt32Field": 3000000000,
+ "int64Field": 9223372036854775807,
+ "nullableInt64Field": 9223372036854775807,
+ "uInt64Field": 9223372036854775808,
+ "nullableUInt64Field": 9223372036854775808,
+ "doubleField": 1056789.123,
+ "nullableDoubleField": 1056789.123,
+ "singleField": 1056789.13,
+ "nullableSingleField": 1056789.13,
+ "decimalField": "1056789.123",
+ "nullableDecimalField": "1056789.123",
+ "dateTimeField": "1776-07-04T00:00:00",
+ "nullableDateTimeField": "1776-07-04T00:00:00",
+ "dateTimeOffsetField": "1776-07-04T00:00:00-05:00",
+ "nullableDateTimeOffsetField": "1776-07-04T00:00:00-05:00",
+ "guidField": "6566f9b4-5245-40de-890d-98b40a4ad656",
+ "nullableGuidField": "3d1fb81e-43ee-4d04-af91-c8a326341293",
+ "stringField": "Some string 156",
+ "enumField": 1,
+ "nullableEnumField": 2
+ }
+ ]
+}
diff --git a/JSONAPI.Tests/Extensions/TypeExtensionsTests.cs b/JSONAPI.Tests/Extensions/TypeExtensionsTests.cs
new file mode 100644
index 00000000..19b51b69
--- /dev/null
+++ b/JSONAPI.Tests/Extensions/TypeExtensionsTests.cs
@@ -0,0 +1,53 @@
+using System;
+using JSONAPI.Extensions;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace JSONAPI.Tests.Extensions
+{
+ [TestClass]
+ public class TypeExtensionsTests
+ {
+ private enum TestEnum
+ {
+
+ }
+
+ [TestMethod]
+ public void CanWriteAsJsonApiAttributeTest()
+ {
+ Assert.IsTrue(typeof(Byte).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for Byte!");
+ Assert.IsTrue(typeof(Byte?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable Byte!");
+ Assert.IsTrue(typeof(SByte).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for SByte!");
+ Assert.IsTrue(typeof(SByte?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable SByte!");
+ Assert.IsTrue(typeof(UInt16).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for UInt16!");
+ Assert.IsTrue(typeof(UInt16?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable UInt16!");
+ Assert.IsTrue(typeof(Int16).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for Int16!");
+ Assert.IsTrue(typeof(Int16?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable Int16!");
+ Assert.IsTrue(typeof(UInt32).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for UInt32!");
+ Assert.IsTrue(typeof(UInt32?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable UInt32!");
+ Assert.IsTrue(typeof(Int32).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for Int32!");
+ Assert.IsTrue(typeof(Int32?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable Int32!");
+ Assert.IsTrue(typeof(UInt64).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for UInt64!");
+ Assert.IsTrue(typeof(UInt64?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable UInt64!");
+ Assert.IsTrue(typeof(Int64).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for Int64!");
+ Assert.IsTrue(typeof(Int64?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable Int64!");
+ Assert.IsTrue(typeof(Double).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for Double!");
+ Assert.IsTrue(typeof(Double?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable Double!");
+ Assert.IsTrue(typeof(Single).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for Single!");
+ Assert.IsTrue(typeof(Single?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable Single!");
+ Assert.IsTrue(typeof(Decimal).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for Decimal!");
+ Assert.IsTrue(typeof(Decimal?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable Decimal!");
+ Assert.IsTrue(typeof(DateTime).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for DateTime!");
+ Assert.IsTrue(typeof(DateTime?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable DateTime!");
+ Assert.IsTrue(typeof(DateTimeOffset).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for DateTimeOffset!");
+ Assert.IsTrue(typeof(DateTimeOffset?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable DateTimeOffset!");
+ Assert.IsTrue(typeof(Guid).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for Guid!");
+ Assert.IsTrue(typeof(Guid?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable Guid!");
+ Assert.IsTrue(typeof(String).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for String!");
+ Assert.IsTrue(typeof(TestEnum).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for enum!");
+ Assert.IsTrue(typeof(TestEnum?).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for nullable enum!");
+ Assert.IsFalse(typeof(Object).CanWriteAsJsonApiAttribute(), "CanWriteTypeAsAttribute returned wrong answer for Object!");
+ }
+
+ }
+}
diff --git a/JSONAPI.Tests/JSONAPI.Tests.csproj b/JSONAPI.Tests/JSONAPI.Tests.csproj
index d61bedf1..3a2d8917 100644
--- a/JSONAPI.Tests/JSONAPI.Tests.csproj
+++ b/JSONAPI.Tests/JSONAPI.Tests.csproj
@@ -78,11 +78,13 @@
+
+
@@ -109,6 +111,9 @@
Always
+
+ Always
+
Always
@@ -116,7 +121,7 @@
-