コード例 #1
0
 internal UnmarshallingContext(XStreamReader reader, ConverterLookup converterLookup, Aliases aliases, List <Assembly> assemblies)
 {
     this.reader          = reader;
     this.converterLookup = converterLookup;
     this.aliases         = aliases;
     this.assemblies      = assemblies;
 }
コード例 #2
0
        public object FromXml(XStreamReader reader, UnmarshallingContext context)
        {
            int count = reader.NoOfChildren();

            // Use the actual data type we are deserializing to rather than inferring from xml metadata
            Type arrayType = context.currentTargetType;

            string arrayTypeName = reader.GetAttribute(ARRAY_TYPE);

            if (arrayTypeName != "")
            {
                arrayType = context.GetTypeFromOtherAssemblies(arrayTypeName);
            }

            if (arrayType.IsArray)
            {
                // Due to the way that the currentTargetType and the constructor works, we need to get the element type instead of the current type.
                //  This probably won't work well for arrays of arrays.
                arrayType = arrayType.GetElementType();
            }

            Array result = Array.CreateInstance(arrayType, count);

            if (count != 0)
            {
                reader.MoveDown();
                for (int i = 0; i < count; i++)
                {
                    result.SetValue(context.ConvertOriginal(), i);
                    reader.MoveNext();
                }
                reader.MoveUp();
            }
            return(result);
        }
コード例 #3
0
        //Todo: duplicated!! refactor
        private static SerializedValue ReadSerializedValue(XStreamReader xStreamReader)
        {
            var tagName = xStreamReader.GetNodeName();
            string attributeValue = xStreamReader.GetAttribute(XsAttribute.classType);
            string nullValue = xStreamReader.GetAttribute(XsAttribute.Null);

            var classAtrribute = new XsAttribute(XsAttribute.classType, attributeValue);
            var nullAtrribute = new XsAttribute(XsAttribute.Null, nullValue);
            return new SerializedValue(tagName, classAtrribute, nullAtrribute);
        }
コード例 #4
0
 public object FromXml(XStreamReader reader, UnmarshallingContext context)
 {
     IList result = (IList) DynamicInstanceBuilder.CreateInstance(Type.GetType(reader.GetAttribute(LIST_TYPE)));
     int count = reader.NoOfChildren();
     reader.MoveDown();
     for (int i = 0; i < count; i++) {
         result.Add(context.ConvertAnother());
         reader.MoveNext();
     }
     reader.MoveUp();
     return result;
 }
コード例 #5
0
        public object UnMarshall(XStreamReader reader, UnmarshallingContext context, Type type)
        {
            var result = context.FindReferenceFromCurrentNode();
            if (result != null) return result;

            if (reader.GetAttribute(XsAttribute.Null) == true.ToString())
                return null;
            result = DynamicInstanceBuilder.CreateInstance(type);
            context.StackObject(result);
            UnmarshalAs(result, type, reader, context);
            return result;
        }
コード例 #6
0
ファイル: FoldersConverter.cs プロジェクト: srushti/azazel
 public object FromXml(XStreamReader reader, UnmarshallingContext context)
 {
     var folders = new Folders();
     var count = reader.NoOfChildren();
     reader.MoveDown();
     for (var i = 0; i < count; i++) {
         folders.Add((Folder) context.ConvertAnother());
         reader.MoveNext();
     }
     reader.MoveUp();
     return folders;
 }
コード例 #7
0
ファイル: ArrayConverter.cs プロジェクト: srushti/xstream.net
 public object FromXml(XStreamReader reader, UnmarshallingContext context) {
     int count = reader.NoOfChildren();
     Array result = Array.CreateInstance(context.GetTypeFromOtherAssemblies(reader.GetAttribute(ARRAY_TYPE)), count);
     if (count != 0) {
         reader.MoveDown();
         for (int i = 0; i < count; i++) {
             result.SetValue(context.ConvertOriginal(), i);
             reader.MoveNext();
         }
         reader.MoveUp();
     }
     return result;
 }
コード例 #8
0
 public object UnMarshall(XStreamReader reader, UnmarshallingContext context, Type type)
 {
     IList result = (IList) DynamicInstanceBuilder.CreateInstance(Type.GetType(reader.GetAttribute(LIST_TYPE)));
     int count = reader.NoOfChildren();
     reader.MoveDown();
     for (int i = 0; i < count; i++) {
         object item = ReadItem(reader, context, result);
         result.Add(item);
         reader.MoveNext();
     }
     reader.MoveUp();
     return result;
 }
コード例 #9
0
ファイル: ListConverter.cs プロジェクト: rollandx/xstream.net
        public object FromXml(XStreamReader reader, UnmarshallingContext context)
        {
            IList result = (IList)DynamicInstanceBuilder.CreateInstance(Type.GetType(reader.GetAttribute(LIST_TYPE)));
            int   count  = reader.NoOfChildren();

            reader.MoveDown();
            for (int i = 0; i < count; i++)
            {
                result.Add(context.ConvertAnother());
                reader.MoveNext();
            }
            reader.MoveUp();
            return(result);
        }
コード例 #10
0
        public object FromXml(XStreamReader reader, UnmarshallingContext context)
        {
            byte[] bytes = null;

            int count = reader.NoOfChildren();

            if (reader.MoveDown("byte-array"))
            {
                string base64 = reader.GetValue();
                bytes = Convert.FromBase64String(base64);
                reader.MoveUp();
            }

            return(bytes);
        }
コード例 #11
0
 public object UnMarshall(XStreamReader reader, UnmarshallingContext context, Type type)
 {
     int count = reader.NoOfChildren();
     Array result = Array.CreateInstance(Type.GetType(reader.GetAttribute(ARRAY_TYPE)), count);
     if (count != 0) {
         reader.MoveDown();
         for (int i = 0; i < count; i++) {
             var serializedValue = ReadSerializedValue(reader);
             var elementType = mapper.ResolveClassTypeFor(serializedValue);
             result.SetValue(context.ConvertAnother(result, elementType), i);
             reader.MoveNext();
         }
         reader.MoveUp();
     }
     return result;
 }
コード例 #12
0
        private void UnmarshalAs(object result, Type type, XStreamReader reader, UnmarshallingContext context)
        {
            if (type.Equals(typeof(object))) return;

            foreach (var field in mapper.GetSerializableFieldsIn(type))
            {
                reader.MoveDown(field.SerializedName);

                var serializedField = ReadSerializedValue(reader);
                var fieldType = mapper.ResolveFieldTypeFor(field, serializedField);
                object fieldValue = context.ConvertAnother(result, fieldType);
                field.SetValue(result, fieldValue);
                reader.MoveUp();
            }
            UnmarshalAs(result, type.BaseType, reader, context);
        }
コード例 #13
0
        public object FromXml(XStreamReader reader, UnmarshallingContext context)
        {
            int   count  = reader.NoOfChildren();
            Array result = Array.CreateInstance(context.GetTypeFromOtherAssemblies(reader.GetAttribute(ARRAY_TYPE)), count);

            if (count != 0)
            {
                reader.MoveDown();
                for (int i = 0; i < count; i++)
                {
                    result.SetValue(context.ConvertOriginal(), i);
                    reader.MoveNext();
                }
                reader.MoveUp();
            }
            return(result);
        }
コード例 #14
0
        public object FromXml(XStreamReader reader, UnmarshallingContext context)
        {
            IDictionary result = EmptyDictionary(reader);
            int         count  = reader.NoOfChildren();

            reader.MoveDown();
            for (int i = 0; i < count; i++)
            {
                reader.MoveDown();
                object key = null, value = null;
                GetObject(context, ref key, ref value, reader);
                reader.MoveNext();
                GetObject(context, ref key, ref value, reader);
                result.Add(key, value);
                reader.MoveUp();
                reader.MoveNext();
            }
            return(result);
        }
コード例 #15
0
        public object FromXml(XStreamReader reader, UnmarshallingContext context)
        {
            IList result = (IList)DynamicInstanceBuilder.CreateInstance(context.currentTargetType);

            Type elementType = null;

            if (context.currentTargetType.HasElementType)
            {
                elementType = context.currentTargetType.GetElementType();
            }
            else if (context.currentTargetType.IsGenericType)
            {
                elementType = context.currentTargetType.GenericTypeArguments[0];
            }
            else
            {
                throw new Exception("Unable to get element type for: " + context.currentTargetType.ToString());
            }

            int count = reader.NoOfChildren();

            if (reader.MoveDown() && count > 0)
            {
                Type previousType = context.currentTargetType;
                context.currentTargetType = elementType;

                for (int i = 0; i < count; i++)
                {
                    result.Add(context.ConvertAnother(elementType));
                    Debug.Assert(reader.MoveNext() || result.Count == count);
                }
                reader.MoveUp();

                context.currentTargetType = previousType;
            }

            return(result);
        }
コード例 #16
0
 protected override IDictionary EmptyDictionary(XStreamReader reader, UnmarshallingContext context)
 {
     return(new Hashtable());
 }
コード例 #17
0
ファイル: Unmarshaller.cs プロジェクト: srushti/xstream.net
 public Unmarshaller(XStreamReader reader, UnmarshallingContext context, ConverterLookup converterLookup) {
     this.reader = reader;
     this.context = context;
     this.converterLookup = converterLookup;
 }
コード例 #18
0
 public Unmarshaller(XStreamReader reader, UnmarshallingContext context, ConverterLookup converterLookup)
 {
     this.reader          = reader;
     this.context         = context;
     this.converterLookup = converterLookup;
 }
コード例 #19
0
 private object ReadItem(XStreamReader reader, UnmarshallingContext context, IList result)
 {
     var serializedValue = ReadSerializedValue(reader);
     var type = mapper.ResolveClassTypeFor(serializedValue);
     return context.ConvertAnother(result, type);
 }
コード例 #20
0
        private static void GetObject(UnmarshallingContext context, ref object key, ref object value, XStreamReader reader)
        {
            string nodeName = reader.GetNodeName();
            object o        = context.ConvertOriginal();

            if (BaseDictionaryConverter <Hashtable> .KEY.Equals(nodeName))
            {
                key = o;
            }
            else
            {
                value = o;
            }
        }
コード例 #21
0
 protected override IDictionary EmptyDictionary(XStreamReader reader)
 {
     return(new Hashtable());
 }
コード例 #22
0
ファイル: SelfPlugin.cs プロジェクト: srushti/azazel
 public object FromXml(XStreamReader reader, UnmarshallingContext context) {
     return selfPlugin.operations;
 }
コード例 #23
0
 public object FromXml(XStreamReader reader, UnmarshallingContext context)
 {
     return(Enum.Parse(context.currentTargetType, reader.GetValue()));
 }
コード例 #24
0
			public object FromXml (XStreamReader reader, UnmarshallingContext context) {
				throw new System.NotImplementedException ();
			}
コード例 #25
0
ファイル: NullConverter.cs プロジェクト: srushti/xstream.net
 public object FromXml(XStreamReader reader, UnmarshallingContext context) {
     return null;
 }
コード例 #26
0
        protected override IDictionary EmptyDictionary(XStreamReader reader, UnmarshallingContext context)
        {
            return((IDictionary)DynamicInstanceBuilder.CreateInstance(context.currentTargetType));

            return((IDictionary)DynamicInstanceBuilder.CreateInstance(Type.GetType(reader.GetAttribute(Attributes.classType))));
        }
コード例 #27
0
ファイル: Recent.cs プロジェクト: srushti/azazel
 public object FromXml(XStreamReader reader, UnmarshallingContext context)
 {
     return selfPlugin.Recent;
 }
コード例 #28
0
 protected override IDictionary EmptyDictionary(XStreamReader reader)
 {
     return((IDictionary)DynamicInstanceBuilder.CreateInstance(Type.GetType(reader.GetAttribute(Attributes.classType))));
 }
コード例 #29
0
 public object FromXml(XStreamReader reader, UnmarshallingContext context)
 {
     return(parse(reader.GetValue()));
 }
コード例 #30
0
 public object FromXml(XStreamReader reader, UnmarshallingContext context)
 {
     return(Enum.Parse(Type.GetType(reader.GetAttribute(Attributes.AttributeType)), reader.GetValue()));
 }
コード例 #31
0
        private static void GetKeyObject(UnmarshallingContext context, ref object key, XStreamReader reader)
        {
            Type previousType = context.currentTargetType;
            Type keyType      = context.currentTargetType.GenericTypeArguments[0];

            string nodeName = reader.GetNodeName();

            context.currentTargetType = keyType;
            key = context.ConvertOriginal(keyType);

            context.currentTargetType = previousType;
        }
コード例 #32
0
        public static void SimpleReadWriteTest(bool Compress = true)
        {
            string[][] LodList = new string[][]
            {
                new string[] { "Content/Models/monkey.obj", "Content/Models/monkeyLod1.obj", "Content/Models/monkeyLod2.obj" },
                new string[] { "Content/Models/squishymonkey.obj", "Content/Models/squishymonkeyLod1.obj" },
                new string[] { "Content/Models/HDmonkey.obj", "Content/Models/HDMonkeyLod1.obj", "Content/Models/HDMonkeyLod2.obj", "Content/Models/HDMonkeyLod3.obj" }
            };

            string[] MetadataStrings = new string[] { "Name:Monkey", "Name:Squishymonkey", "Name:HDmonkey" };

            string Ext = "";
            EDeflateCompression CompressEnum;

            if (Compress)
            {
                CompressEnum = EDeflateCompression.Compress;
                Ext          = "x3_c_";
            }
            else
            {
                CompressEnum = EDeflateCompression.DoNotCompress;
                Ext          = "x3_p_";
            }

            List <HierarchyNode> WriteHNodes   = new List <HierarchyNode>();
            List <GeometryNode>  WritePolygons = new List <GeometryNode>();
            List <MetadataNode>  WriteMNodes   = new List <MetadataNode>();

            Random Rand = new Random();

            for (int i = 0; i < 3; ++i)
            {
                HierarchyNode HNode = new HierarchyNode();
                HNode.UniqueID = GetId();


                MetadataNode Meta = new MetadataNode();
                Meta.Metadata = MetadataStrings[i];
                Meta.UniqueID = GetId();

                var Polygon = new GeometryNode();

                for (int f = 0; f < LodList[i].Length; ++f)
                {
                    Obj ObjFile = new Obj();
                    ObjFile.LoadObj(LodList[i][f]);
                    SetPolygonData(Polygon, ObjFile, f);
                }

                Polygon.UniqueID = GetId();

                HierarchyNode.GeometryPart Part = CreateGeometryPart(Rand, i, Polygon);

                HNode.GeometryParts.Add(Part);

                HNode.MetadataID = Meta.UniqueID;

                if (i != 0)
                {
                    HNode.ParentID = WriteHNodes[i - 1].UniqueID;
                    WriteHNodes[i - 1].ChildNodes.Add(HNode.UniqueID);

                    //HierarchyNode.GeometryPart InstancePart = CreateGeometryPart(Rand, i, WritePolygons[i - 1]);
                    //HNode.GeometryParts.Add(InstancePart);
                }

                WriteHNodes.Add(HNode);
                WritePolygons.Add(Polygon);
                WriteMNodes.Add(Meta);
            }

            Dictionary <ENodeType, StreamStruct> Streams = new Dictionary <ENodeType, StreamStruct>();

            FileStream   WriteFileStreamH = new FileStream($"m.{Ext}h", FileMode.Create);
            StreamStruct StreamStructH    = new StreamStruct(WriteFileStreamH, CompressEnum);

            FileStream   WriteFileStreamG = new FileStream($"m.{Ext}g", FileMode.Create);
            StreamStruct StreamStructG    = new StreamStruct(WriteFileStreamG, CompressEnum);

            FileStream   FileStreamM   = new FileStream($"m.{Ext}m", FileMode.Create);
            StreamStruct StreamStructM = new StreamStruct(FileStreamM, CompressEnum);

            Streams.Add(ENodeType.Hierarchy, StreamStructH);
            Streams.Add(ENodeType.Geometry, StreamStructG);
            Streams.Add(ENodeType.Metadata, StreamStructM);

            Console.WriteLine("Writing");

            using (XStreamWriter writer = new XStreamWriter(Streams))
            {
                for (int i = 0; i < WriteHNodes.Count; ++i)
                {
                    writer.Write(WriteHNodes[i]);
                }

                for (int i = 0; i < WritePolygons.Count; ++i)
                {
                    writer.Write(WritePolygons[i]);
                }

                for (int i = 0; i < WriteMNodes.Count; ++i)
                {
                    writer.Write(WriteMNodes[i]);
                }
            }
            //Dispose of stream here
            Streams[ENodeType.Hierarchy].IOStream.Dispose();
            Streams[ENodeType.Metadata].IOStream.Dispose();
            Streams[ENodeType.Geometry].IOStream.Dispose();


            Console.WriteLine("Done writing");
            Console.WriteLine("Reading");

            List <GeometryNode>  ReadPolygons = new List <GeometryNode>();
            List <HierarchyNode> ReadHNodes   = new List <HierarchyNode>();
            List <MetadataNode>  ReadMNodes   = new List <MetadataNode>();

            ManualResetEvent WaitReads = new ManualResetEvent(false);
            int ReadsLeft = WriteHNodes.Count + WriteMNodes.Count + WritePolygons.Count;

            FileStream ReadFileStreamH = new FileStream($"m.{Ext}h", FileMode.Open);
            FileStream ReadFileStreamG = new FileStream($"m.{Ext}g", FileMode.Open);
            FileStream ReadFileStreamM = new FileStream($"m.{Ext}m", FileMode.Open);

            using (XStreamReader ReaderH = new XStreamReader(ENodeType.Hierarchy, ReadFileStreamH,
                                                             (_Sdk) =>
            {
            },
                                                             (_Node) =>
            {
                Interlocked.Decrement(ref ReadsLeft);
                lock (ReadHNodes)
                {
                    ReadHNodes.Add((HierarchyNode)_Node);
                }
                if (ReadsLeft == 0)
                {
                    WaitReads.Set();
                }
            }, CompressEnum))
            {
                if (!ReaderH.Process(Console.WriteLine))
                {
                    throw new Exception("Failed");
                }
            }

            using (XStreamReader ReaderM = new XStreamReader(ENodeType.Metadata, ReadFileStreamM,
                                                             (_Sdk) =>
            {
            },
                                                             (_Node) =>
            {
                Interlocked.Decrement(ref ReadsLeft);
                lock (ReadMNodes)
                {
                    ReadMNodes.Add((MetadataNode)_Node);
                }
                if (ReadsLeft == 0)
                {
                    WaitReads.Set();
                }
            }, CompressEnum))
            {
                if (!ReaderM.Process(Console.WriteLine))
                {
                    throw new Exception("Failed");
                }
            }

            using (XStreamReader ReaderG = new XStreamReader(ENodeType.Geometry, ReadFileStreamG,
                                                             (_Sdk) =>
            {
            },
                                                             (_Node) =>
            {
                Interlocked.Decrement(ref ReadsLeft);
                lock (ReadPolygons)
                {
                    ReadPolygons.Add((GeometryNode)_Node);
                }
                if (ReadsLeft == 0)
                {
                    WaitReads.Set();
                }
            }, CompressEnum))
            {
                if (!ReaderG.Process(Console.WriteLine))
                {
                    throw new Exception("Failed");
                }
            }

            WaitReads.WaitOne();
            Console.WriteLine("Done Reading");

            WritePolygons = WritePolygons.OrderBy(x => x.UniqueID).ToList();
            ReadPolygons  = ReadPolygons.OrderBy(x => x.UniqueID).ToList();
            WriteMNodes   = WriteMNodes.OrderBy(x => x.UniqueID).ToList();
            ReadMNodes    = ReadMNodes.OrderBy(x => x.UniqueID).ToList();
            WriteHNodes   = WriteHNodes.OrderBy(x => x.UniqueID).ToList();
            ReadHNodes    = ReadHNodes.OrderBy(x => x.UniqueID).ToList();

            CheckInputVsOutput(WritePolygons, WriteHNodes, WriteMNodes, ReadPolygons, ReadHNodes, ReadMNodes);
        }
コード例 #33
0
        private static void GetValueObject(UnmarshallingContext context, ref object value, XStreamReader reader)
        {
            Type previousType = context.currentTargetType;
            Type valueType    = context.currentTargetType.GenericTypeArguments[1];

            string nodeName = reader.GetNodeName();

            context.currentTargetType = valueType;
            value = context.ConvertOriginal(valueType);

            context.currentTargetType = previousType;
        }
コード例 #34
0
 protected abstract IDictionary EmptyDictionary(XStreamReader reader);
コード例 #35
0
 internal UnmarshallingContext(XStreamReader reader, ConverterLookup converterLookup, Aliases aliases, List<Assembly> assemblies) {
     this.reader = reader;
     this.converterLookup = converterLookup;
     this.aliases = aliases;
     this.assemblies = assemblies;
 }
コード例 #36
0
 public object UnMarshall(XStreamReader reader, UnmarshallingContext context, Type type)
 {
     return Enum.Parse(Type.GetType(reader.GetAttribute(XsAttribute.AttributeType)), reader.GetValue());
 }
コード例 #37
0
 public object FromXml(XStreamReader reader, UnmarshallingContext context)
 {
     throw new System.NotImplementedException();
 }
コード例 #38
0
 internal UnmarshallingContext(XStreamReader reader, ConverterLookup converterLookup, IMapper mapper)
 {
     this.reader = reader;
     this.converterLookup = converterLookup;
     this.mapper = mapper;
 }
コード例 #39
0
ファイル: EnumConverter.cs プロジェクト: srushti/xstream.net
 public object FromXml(XStreamReader reader, UnmarshallingContext context) {
     return Enum.Parse(Type.GetType(reader.GetAttribute(Attributes.AttributeType)), reader.GetValue());
 }
コード例 #40
0
 protected abstract IDictionary EmptyDictionary(XStreamReader reader, UnmarshallingContext context);
コード例 #41
0
 public object FromXml(XStreamReader reader, UnmarshallingContext context)
 {
     return(null);
 }