Пример #1
0
        public void AsyncSerialization(dynamic xmlObject)
        {
            Type type;
            // Generation of .xml file node names
            string     PilotName = NameGeneration(xmlObject.GetType().ToString()), RootName = PilotName + "s";
            FileStream file = new FileStream(path, FileMode.Create);

            using (var writer = new StreamWriter(file)) {
                writer.WriteLine(EncryptionLine("<?xml version=\"1.0\"?>"));
                writer.WriteLine(EncryptionLine(string.Format("<{0}>", RootName)));
                string RetReat = "   ", elementEncrypt = "";
                for (int i = 0; i < xmlObject.Count; i++)
                {
                    elementEncrypt = "";
                    // Obtaining a list item type
                    type = xmlObject[i].GetType();
                    // Obtaining the list item's fields
                    FieldInfo[] ClassFields = type.GetFields();
                    elementEncrypt += string.Format("<{0}", PilotName);
                    foreach (var ClassField in ClassFields)
                    {
                        ShOneXmlAttribute attribut = (ShOneXmlAttribute)ClassField.GetCustomAttribute(typeof(ShOneXmlAttribute), false);
                        if (attribut != null)
                        {
                            if (attribut.PositionAttribute == "Attribute")
                            {
                                elementEncrypt += string.Format(" {0}=\"{1}\"", ClassField.Name, ClassField.GetValue(xmlObject[i]));
                            }
                        }
                    }
                    elementEncrypt += ">";
                    writer.WriteLine(RetReat + EncryptionLine(elementEncrypt));
                    RetReat += "  ";
                    foreach (var ClassField in ClassFields)
                    {
                        ShOneXmlAttribute attribut = (ShOneXmlAttribute)ClassField.GetCustomAttribute(typeof(ShOneXmlAttribute), false);
                        if (attribut == null || attribut.PositionAttribute == "Element")
                        {
                            elementEncrypt = string.Format("<{0}>{1}</{2}>", ClassField.Name, ClassField.GetValue(xmlObject[i]), ClassField.Name);
                            writer.WriteLine("{0}{1}", RetReat, EncryptionLine(elementEncrypt));
                        }
                    }
                    RetReat = RetReat.Remove(0, 2);
                    writer.WriteLine(RetReat + EncryptionLine(string.Format("</{0}>", PilotName)));
                }
                writer.WriteLine(EncryptionLine(string.Format("</{0}>", RootName)));
            }
            state = true;
        }