コード例 #1
0
 public void ReadData(IObjectDataInput input)
 {
     ds       = input.ReadObject <IDataSerializable>();
     portable = input.ReadObject <IPortable>();
     ds2      = input.ReadObject <IDataSerializable>();
 }
コード例 #2
0
 public ComplexDataSerializable(IPortable portable, IDataSerializable ds, IDataSerializable ds2)
 {
     this.portable = portable;
     this.ds       = ds;
     this.ds2      = ds2;
 }
コード例 #3
0
 public ComplexDataSerializable(IPortable portable, IDataSerializable ds, IDataSerializable ds2)
 {
     this.portable = portable;
     this.ds = ds;
     this.ds2 = ds2;
 }
コード例 #4
0
 public void ReadData(IObjectDataInput input)
 {
     ds = input.ReadObject<IDataSerializable>();
     portable = input.ReadObject<IPortable>();
     ds2 = input.ReadObject<IDataSerializable>();
 }
コード例 #5
0
ファイル: IDataSerializable.cs プロジェクト: nrabreu/LibForge
        public static DataArray Serialize(this IDataSerializable obj)
        {
            var array = new DataArray();

            foreach (var field in obj.GetType().GetProperties())
            {
                var name = CamelToSnake(field.Name);
                if (field.PropertyType.IsGenericType)
                {
                    var gtd  = field.PropertyType.GetGenericTypeDefinition();
                    var args = field.PropertyType.GetGenericArguments();
                    if (gtd == typeof(List <>))
                    {
                        // Add list elements
                        if (!typeof(IDataSerializable).IsAssignableFrom(args[0]))
                        {
                            throw new NotImplementedException("Cannot handle non-serializable types in lists yet");
                        }
                        var listArray   = new DataArray();
                        var value       = (IList)field.GetValue(obj, null);
                        var typename    = CamelToSnake(args[0].Name);
                        var namedValues = field.GetCustomAttributes(typeof(AnonymousListAttribute), true).Length == 0;
                        foreach (var f in value)
                        {
                            var valueNode = SerializeObject(f);
                            listArray.AddNode(namedValues ? NamedItem(typename, valueNode) : valueNode);
                        }
                        array.AddNode(NamedItem(name, listArray));
                    }
                    else if (gtd == typeof(Dictionary <,>))
                    {
                        // Add dictionary elements
                        if (args[0] != typeof(string))
                        {
                            throw new NotImplementedException("Cannot serialize dictionaries with non-string keys");
                        }
                        if (!typeof(IDataSerializable).IsAssignableFrom(args[1]))
                        {
                            throw new NotImplementedException("Cannot handle non-serializable types in dictionaries yet");
                        }
                        var dictArray = new DataArray();
                        var value     = (IDictionary)field.GetValue(obj, null);
                        foreach (var k in value.Keys)
                        {
                            dictArray.AddNode(NamedItem((string)k, SerializeObject(value[k])));
                        }
                        array.AddNode(NamedItem(name, dictArray));
                    }
                    else if (gtd == typeof(Tuple <,>))
                    {
                        var tupleArray = new DataArray();
                        tupleArray.AddNode(new DataAtom(name));
                        var tuple = field.GetValue(obj, null) as ITuple;
                        for (var i = 0; i < tuple.Length; i++)
                        {
                            tupleArray.AddNode(SerializeObject(tuple[i]));
                        }
                        array.AddNode(tupleArray);
                    }
                    else if (gtd == typeof(Nullable <>))
                    {
                        var value = field.GetValue(obj, null);
                        if (value != null)
                        {
                            array.AddNode(NamedItem(name, SerializeObject(value)));
                        }
                    }
                    else
                    {
                        throw new NotImplementedException("Generic type support for " + field.PropertyType.FullName + " not implemented");
                    }
                }
                else
                {
                    array.AddNode(NamedItem(name, SerializeObject(field.GetValue(obj, null))));
                }
            }
            return(array);
        }