示例#1
0
        public TDictionary Deserialize(NetDataReader reader, NetDataSerializerOptions options)
        {
            if (reader.ReadBoolean() == false)
            {
                return(default(TDictionary));
            }
            else
            {
                INetDataFormatterResolver  resolver       = options.Resolver;
                INetDataFormatter <TKey>   keyFormatter   = resolver.GetFormatter <TKey>();
                INetDataFormatter <TValue> valueFormatter = resolver.GetFormatter <TValue>();

                var len = reader.ReadInt32();

                TIntermediate dict = this.Create(len, options);

                for (int i = 0; i < len; i++)
                {
                    TKey   key   = keyFormatter.Deserialize(reader, options);
                    TValue value = valueFormatter.Deserialize(reader, options);

                    this.Add(dict, i, key, value, options);
                }

                return(this.Complete(dict));
            }
        }
        public void Serialize(NetDataWriter writer, ValueTuple <T1> value, NetDataSerializerOptions options)
        {
            writer.Write((byte)1);

            INetDataFormatterResolver resolver = options.Resolver;

            resolver.GetFormatter <T1>().Serialize(writer, value.Item1, options);
        }
示例#3
0
        public void Serialize(NetDataWriter writer, KeyValuePair <TKey, TValue> value, NetDataSerializerOptions options)
        {
            writer.Write((byte)2);
            INetDataFormatterResolver resolver = options.Resolver;

            resolver.GetFormatter <TKey>().Serialize(writer, value.Key, options);
            resolver.GetFormatter <TValue>().Serialize(writer, value.Value, options);
            return;
        }
示例#4
0
        public void Serialize(NetDataWriter writer, TDictionary value, NetDataSerializerOptions options)
        {
            if (value == null)
            {
                writer.Write(false);
            }
            else
            {
                writer.Write(true);

                INetDataFormatterResolver  resolver       = options.Resolver;
                INetDataFormatter <TKey>   keyFormatter   = resolver.GetFormatter <TKey>();
                INetDataFormatter <TValue> valueFormatter = resolver.GetFormatter <TValue>();

                int count;
                {
                    var col = value as ICollection <KeyValuePair <TKey, TValue> >;
                    if (col != null)
                    {
                        count = col.Count;
                    }
                    else
                    {
                        var col2 = value as IReadOnlyCollection <KeyValuePair <TKey, TValue> >;
                        if (col2 != null)
                        {
                            count = col2.Count;
                        }
                        else
                        {
                            throw new NetDataSerializationException("DictionaryFormatterBase's TDictionary supports only ICollection<KVP> or IReadOnlyCollection<KVP>");
                        }
                    }
                }

                writer.Write(count);

                TEnumerator e = this.GetSourceEnumerator(value);
                try
                {
                    while (e.MoveNext())
                    {
                        KeyValuePair <TKey, TValue> item = e.Current;
                        keyFormatter.Serialize(writer, item.Key, options);
                        valueFormatter.Serialize(writer, item.Value, options);
                    }
                }
                finally
                {
                    e.Dispose();
                }
            }
        }
        public ValueTuple <T1> Deserialize(NetDataReader reader, NetDataSerializerOptions options)
        {
            var count = reader.ReadByte();

            if (count != 1)
            {
                throw new NetDataSerializationException("Invalid ValueTuple count");
            }

            INetDataFormatterResolver resolver = options.Resolver;

            T1 item1 = resolver.GetFormatter <T1>().Deserialize(reader, options);

            return(new ValueTuple <T1>(item1));
        }
示例#6
0
        public void Serialize(NetDataWriter writer, Tuple <T1> value, NetDataSerializerOptions options)
        {
            if (value == null)
            {
                writer.Write(false);
            }
            else
            {
                writer.Write(true);
                writer.Write((byte)1);

                INetDataFormatterResolver resolver = options.Resolver;
                resolver.GetFormatter <T1>().Serialize(writer, value.Item1, options);
            }
        }
示例#7
0
        public KeyValuePair <TKey, TValue> Deserialize(NetDataReader reader, NetDataSerializerOptions options)
        {
            var count = reader.ReadByte();

            if (count != 2)
            {
                throw new NetDataSerializationException("Invalid KeyValuePair format.");
            }

            INetDataFormatterResolver resolver = options.Resolver;

            TKey   key   = resolver.GetFormatter <TKey>().Deserialize(reader, options);
            TValue value = resolver.GetFormatter <TValue>().Deserialize(reader, options);

            return(new KeyValuePair <TKey, TValue>(key, value));
        }
示例#8
0
 public NetDataSerializerOptions(INetDataFormatterResolver resolver)
 {
     Resolver = resolver;
 }