Skip to content

SerializerGenerator can't generate when target type has DataContract and skipped order #145

@neuecc

Description

@neuecc

If target properties has skipped order, for example DataMember(Order = 0), DataMember(Order = 2) SErializerGenerator throws ArgumentNullException.

using System;
using System.IO;
using System.Runtime.Serialization;
using MsgPack.Serialization;

[DataContract]
public class MyClass
{
    [DataMember(Order = 0)]
    public int MyProperty1 { get; set; }
    [DataMember(Order = 2)]
    public int MyProperty2 { get; set; }
}

class Program
{
    static void Main(string[] args)
    {

        var generated = SerializerGenerator.GenerateSerializerSourceCodes(new SerializerCodeGenerationConfiguration
        {
            EnumSerializationMethod = EnumSerializationMethod.ByUnderlyingValue,
            IsRecursive = true,
            OutputDirectory = Path.GetTempPath(),
            WithNullableSerializers = false,
            PreferReflectionBasedSerializer = true,
            SerializationMethod = SerializationMethod.Array
        }, typeof(MyClass));

        foreach (var item in generated)
        {
            Console.WriteLine(File.ReadAllText(item.FilePath));
        }
    }
}
ハンドルされていない例外: System.ArgumentNullException: 値を Null にすることはできません。
パラメーター名:source
   場所 MsgPack.Serialization.ReflectionExtensions.GetMemberValueType(MemberInfo source)
   場所 MsgPack.Serialization.SerializerGenerator.SerializerGenerationLogic`1.<>c__DisplayClass10.<ExtractElementTypes>b__c(SerializingMember m)
   場所 System.Linq.Enumerable.<SelectManyIterator>d__16`2.MoveNext()
   場所 MsgPack.Serialization.SerializerGenerator.SerializerGenerationLogic`1.<ExtractElementTypes>d__12.MoveNext()
   場所 System.Linq.Enumerable.<SelectManyIterator>d__16`2.MoveNext()
   場所 System.Linq.Enumerable.<DistinctIterator>d__63`1.MoveNext()
   場所 MsgPack.Serialization.SerializerGenerator.SerializerGenerationLogic`1.Generate(IEnumerable`1 targetTypes, TConfig configuration)
   場所 MsgPack.Serialization.SerializerGenerator.GenerateSerializerSourceCodes(SerializerCodeGenerationConfiguration configuration, IEnumerable`1 targetTypes)
   場所 MsgPack.Serialization.SerializerGenerator.GenerateSerializerSourceCodes(SerializerCodeGenerationConfiguration configuration, Type[] targetTypes)
   場所 ConsoleApplication116.Program.Main(String[] args) 場所 c:\users\y.kawai\documents\visual studio 2015\Projects\ConsoleApplication116\ConsoleApplication116\Program.cs:行 40

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugDetected as bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions