コード例 #1
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            IVirtualListSerializable vlist           = (IVirtualListSerializable)value;
            Dictionary <string, int> dictToSerialize = vlist.InitialPositionOfEachPage;

            if (dictToSerialize.Count > 1)
            {
                dictToSerialize = dictToSerialize.GroupBy(k => k.Value)
                                  .Select(group => group.Last())
                                  .ToDictionary(pair => pair.Key, pair => pair.Value);
            }
            writer.WriteStartArray();
            writer.WriteValue(vlist.ListType);
            writer.WriteValue(vlist.Count);
            if (vlist.Count > 0)
            {
                serializer.Serialize(writer, dictToSerialize);
            }
            writer.WriteEndArray();
        }
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            IVirtualListSerializable vlist = (IVirtualListSerializable)value;

            writer.WriteStartObject();
            writer.WritePropertyName("@arr");
            writer.WriteValue("1");
            writer.WritePropertyName("ltype");
            writer.WriteValue(vlist.ListType);
            writer.WritePropertyName("UniqueID");
            writer.WriteValue(vlist.UniqueID);
            writer.WritePropertyName("Count");
            writer.WriteValue(vlist.Count);
            writer.WritePropertyName("uids");
            writer.WriteStartArray();
            var type = vlist.GetType().GetGenericArguments()[0];

            foreach (KeyValuePair <string, int> val in vlist.InitialPositionOfEachPage)
            {
                Page p = vlist.PageManager.LoadPage(val.Key);
                foreach (var item in p.GetStoredObjects())
                {
                    LazyObject lazy = (LazyObject)item;
                    if (lazy.TargetUniqueID != null)
                    {
                        writer.WriteValue(lazy.TargetUniqueID);
                    }
                    else
                    {
                        //We have to validate if the type is not a Struct
                        //because the structs shouldn't go to client at this moment.
                        if (!(!type.IsEnum && !type.IsPrimitive && type.IsValueType && type != typeof(DateTime)))
                        {
                            writer.WriteValue(lazy.Target);
                        }
                    }
                }
            }
            writer.WriteEndArray();
            writer.WriteEndObject();
        }
コード例 #3
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            IVirtualListSerializable vlist = (IVirtualListSerializable)existingValue;

            reader.Read();
            var typelist = (long)reader.Value;

            reader.Read();
            int count = (int)(long)reader.Value;

            vlist.ListType = (VirtualListTypeEnum)typelist;
            vlist.InitializeOperationHelper();
            vlist.PageUniqueIdOfTheIndexes = new List <string>();
            if (count > 0)
            {
                reader.Read();
                var dictToDeserialize = serializer.Deserialize <Dictionary <string, int> >(reader);
                dictToDeserialize =
                    vlist.InitialPositionOfEachPage = dictToDeserialize;
                for (int i = 0; i < dictToDeserialize.Values.Count; i++)
                {
                    var current = dictToDeserialize.Values.ElementAt(i);
                    int next;
                    if (i + 1 < dictToDeserialize.Values.Count)
                    {
                        next = dictToDeserialize.Values.ElementAt(i + 1);
                    }
                    else
                    {
                        next = count;
                    }
                    for (var j = vlist.PageUniqueIdOfTheIndexes.Count; j < next; j++)
                    {
                        vlist.PageUniqueIdOfTheIndexes.Add(dictToDeserialize.Keys.ElementAt(i));
                    }
                }
            }
            return(vlist);
        }