public TypeSchema Initialize(KnownSerializers serializers, TypeSchema targetSchema) { this.elementHandler = serializers.GetHandler <T>(); // register element type var type = typeof(T[]); var name = TypeSchema.GetContractName(type, serializers.RuntimeVersion); var elementsMember = new TypeMemberSchema("Elements", typeof(T).AssemblyQualifiedName, true); var schema = new TypeSchema(name, TypeSchema.GetId(name), type.AssemblyQualifiedName, TypeFlags.IsCollection, new TypeMemberSchema[] { elementsMember }, Version); return(targetSchema ?? schema); }
/// <inheritdoc /> public TypeSchema Initialize(KnownSerializers serializers, TypeSchema targetSchema) { // Add a comparerHandler of type IEqualityComparer. This will take care of serializing, // deserializing and cloning the Comparer member of Dictionary. Because the comparer field // is private, we will also need to generate a dynamic method so that we can set the // comparer field upon deserialization or cloning. This method should be invoked right after // clearing the target Dictionary, before adding the deserialized or cloned entries to it. this.comparerHandler = serializers.GetHandler <IEqualityComparer <TKey> >(); this.setComparerImpl = this.GenerateSetComparerMethod(); // Use an array serializer to serialize the dictionary elements as an array of key-value pairs this.entriesHandler = serializers.GetHandler <KeyValuePair <TKey, TValue>[]>(); var type = typeof(Dictionary <TKey, TValue>); var name = TypeSchema.GetContractName(type, serializers.RuntimeVersion); // Treat the Dictionary as a class with 2 members - a comparer and an array of key-value pairs var comparerMember = new TypeMemberSchema("Comparer", typeof(IEqualityComparer <TKey>).AssemblyQualifiedName, true); var entriesMember = new TypeMemberSchema("KeyValuePairs", typeof(KeyValuePair <TKey, TValue>[]).AssemblyQualifiedName, true); var schema = new TypeSchema(name, TypeSchema.GetId(name), type.AssemblyQualifiedName, TypeFlags.IsClass, new[] { comparerMember, entriesMember }, SchemaVersion); return(targetSchema ?? schema); }