diff --git a/Metsys.Little.Tests/IntegrationTests.cs b/Metsys.Little.Tests/IntegrationTests.cs index 65b85f5..37d2ef0 100644 --- a/Metsys.Little.Tests/IntegrationTests.cs +++ b/Metsys.Little.Tests/IntegrationTests.cs @@ -53,7 +53,6 @@ public void CollectionsAreLossless() }; expected.Roles.Add("abc123"); expected.Roles.Add("lkasdk"); - expected.Roles.Add(null); var data = Serializer.Serialize(expected); var actual = Deserializer.Deserialize(data); diff --git a/Metsys.Little.Tests/SerializerTests.cs b/Metsys.Little.Tests/SerializerTests.cs index 861a283..b65f8f4 100644 --- a/Metsys.Little.Tests/SerializerTests.cs +++ b/Metsys.Little.Tests/SerializerTests.cs @@ -136,7 +136,7 @@ public void NullArrayGetsSerialized() Assert.Equal(0, data[0]); Assert.Equal(1, data.Length); } - [Fact] + [Fact(Skip="took out this feature")] public void SerializesArrayWithMixOfNullsAndNotNulls() { var data = Serializer.Serialize(new[] {"ab", null, "cd", null, null}); diff --git a/Metsys.Little/Deserializer.cs b/Metsys.Little/Deserializer.cs index 7ecfb85..53411ea 100644 --- a/Metsys.Little/Deserializer.cs +++ b/Metsys.Little/Deserializer.cs @@ -70,11 +70,10 @@ private object ReadList(Type listType, object existingContainer) var count = 0; var itemType = ListHelper.GetListItemType(listType); var wrapper = BaseWrapper.Create(listType, itemType, existingContainer); - var nullable = MagicProperty.IsNullable(itemType); - + while (count++ < totalItems) { - var value = nullable && IsNull() ? null : DeserializeValue(itemType, null); + var value = DeserializeValue(itemType, null); wrapper.Add(value); } return wrapper.Collection; diff --git a/Metsys.Little/Helpers/Lists/BaseWrapper.cs b/Metsys.Little/Helpers/Lists/BaseWrapper.cs index 9c99881..2eb16b4 100644 --- a/Metsys.Little/Helpers/Lists/BaseWrapper.cs +++ b/Metsys.Little/Helpers/Lists/BaseWrapper.cs @@ -21,11 +21,20 @@ private static BaseWrapper CreateWrapperFromType(Type type, Type itemType) return (BaseWrapper)Activator.CreateInstance(typeof(ArrayWrapper<>).MakeGenericType(itemType)); } - var isCollection = false; - var types = new List(type.GetInterfaces().Select(h => h.IsGenericType ? h.GetGenericTypeDefinition() : h)); - types.Insert(0, type.IsGenericType ? type.GetGenericTypeDefinition() : type); - foreach(var @interface in types) + var isCollection = false; + var interfaces = type.GetInterfaces(); + var count = interfaces.Length + 1; + var types = new List(count) {type.IsGenericType ? type.GetGenericTypeDefinition() : type}; + types.AddRange(interfaces); + + for(var i = 0; i < count; ++i) { + var @interface = types[i]; + if (@interface.IsGenericType) + { + @interface = @interface.GetGenericTypeDefinition(); + types[i] = @interface; + } if (typeof(IList<>).IsAssignableFrom(@interface) || typeof(IList).IsAssignableFrom(@interface)) { return new ListWrapper(); @@ -41,8 +50,9 @@ private static BaseWrapper CreateWrapperFromType(Type type, Type itemType) } //a last-ditch pass - foreach (var @interface in types) + for(var i = 0; i < count; ++i) { + var @interface = types[i]; if (typeof(IEnumerable<>).IsAssignableFrom(@interface) || typeof(IEnumerable).IsAssignableFrom(@interface)) { return new ListWrapper(); diff --git a/Metsys.Little/Serializer.cs b/Metsys.Little/Serializer.cs index 272e747..4d41093 100644 --- a/Metsys.Little/Serializer.cs +++ b/Metsys.Little/Serializer.cs @@ -64,10 +64,6 @@ private void WriteObject(object o) var value = property.Getter(o); if (value == null) { - if (!property.Nullable) - { - throw new InvalidOperationException(string.Format("Got not value for non-nullable type: {0}", property.Type.Name)); - } WriteNull(); continue; } @@ -77,7 +73,7 @@ private void WriteObject(object o) private void SerializeMember(object value, bool nullable) { - Type type = value.GetType(); + var type = value.GetType(); if (type.IsEnum) { type = Enum.GetUnderlyingType(type); @@ -106,11 +102,11 @@ private void Write(IEnumerable enumerable) var start = _stream.Position; _writer.Write(0); //placeholder for # of elements var count = 0; - bool? nullable = null; + //bool? nullable = null; foreach (var item in enumerable) { - ++count; - if (item == null) + ++count; +/* if (item == null) { WriteNull(); continue; @@ -119,7 +115,8 @@ private void Write(IEnumerable enumerable) { nullable = MagicProperty.IsNullable(item.GetType()); } - SerializeMember(item, nullable.Value); + */ + SerializeMember(item, false); } _stream.Seek(start, SeekOrigin.Begin); _writer.Write(count);