コード例 #1
0
ファイル: JsonSerializer.cs プロジェクト: flipback/Galilei
        public override string Serialize(Node node, Type typeAttr)
        {
            XpcaProxy proxy = new XpcaProxy(node);
            StringWriter sw = new StringWriter();

            using(JsonWriter jsonWriter = new JsonTextWriter(sw))
            {
                jsonWriter.Formatting = Newtonsoft.Json.Formatting.None;
                jsonWriter.WriteStartObject();

                foreach (KeyValuePair<string, PropertyInfo> property in proxy.GetPropertiesFor(typeAttr)) {
                    object value = proxy[property.Key];

                    if (value != null) {
                        jsonWriter.WritePropertyName(property.Key);
                        if(value is IEnumerable<object>) {
                            jsonWriter.WriteStartArray();

                            foreach (object obj in (value as IEnumerable<object>)) {
                                JsonWriteValue(jsonWriter, obj);
                            }

                            jsonWriter.WriteEndArray();
                        }
                        else {
                            JsonWriteValue(jsonWriter, value);
                        }
                    }
                }
                jsonWriter.WriteEndObject();
            }

            return sw.ToString();
        }
コード例 #2
0
ファイル: JsonSerializer.cs プロジェクト: flipback/Galilei
        public override void Deserialize(Node node, string data)
        {
            TextReader tr = new StringReader(data);
            Dictionary<string, object> properties = new Dictionary<string, object>();

            using(JsonTextReader jsonReader = new JsonTextReader(tr))
            {
                while (jsonReader.Read()){
                    if (jsonReader.TokenType == JsonToken.PropertyName) {
                        string name = jsonReader.Value.ToString();
                        if (jsonReader.Read()) {
                            switch (jsonReader.TokenType) {
                            case JsonToken.String:
                            case JsonToken.Boolean:
                            case JsonToken.Date:
                            case JsonToken.Integer:
                                properties.Add(name, jsonReader.Value);
                                break;
                            case JsonToken.StartArray:
                                List<object> objs = new List<object>();
                                while(jsonReader.Read() && jsonReader.TokenType != JsonToken.EndArray) {
                                    objs.Add(jsonReader.Value);
                                }
                                properties.Add(name, objs.ToArray());
                                break;
                            }

                        }

                    }
                }
            }

            UpdateNode (node, properties);
        }
コード例 #3
0
ファイル: UNode.cs プロジェクト: flipback/Galilei
 public void SetUp()
 {
     parentNode1 = new Node("parentNode1");
     parentNode2 = new Node("parentNode2");
     node = new Node("node");
     node.Parent = parentNode1;
 }
コード例 #4
0
ファイル: TreeBuilder.cs プロジェクト: flipback/Galilei
        public void Build(string fullName, NameValueCollection parms)
        {
            Node node;
            string[] splitUrl = fullName.Split('/');
            string name = splitUrl[splitUrl.Length -1];
            string parentPath = String.Join("/", splitUrl, 0, splitUrl.Length - 1);

            if (parms["type"] == null) {
                node = new Node();
            }
            else {
                    Type type = srv.Types.Find(delegate (Type t) {
                        return t.Name == parms["type"];
                    });
                if (type != null) {
                    node = Activator.CreateInstance(type, new object[] {}) as Node;
                }
                else {
                    throw new XpcaTypeError(parms["type"]);
                }
            }

            node.Name = name;
            srv[parentPath] = node;
            hasConfigChanges = true;

            Update(fullName, parms);
        }
コード例 #5
0
ファイル: XmlSerializer.cs プロジェクト: flipback/Galilei
        public override void Deserialize(Node node, string data)
        {
            TextReader tr = new StringReader(data);
            Dictionary<string, object> properties = new Dictionary<string, object>();

            using(XmlReader xmlReader = new XmlTextReader(tr))
            {
                xmlReader.ReadStartElement("root");
                do {
                    if (xmlReader.NodeType == XmlNodeType.Element) {
                        string name = xmlReader.Name;
                        if (xmlReader.Read()) {
                            switch (xmlReader.NodeType) {
                            case XmlNodeType.Text:
                                properties.Add(name, xmlReader.ReadContentAs(xmlReader.ValueType, null));
                                break;
                            case XmlNodeType.Element:
                                List<object> objs = new List<object>();
                                while(xmlReader.Read() && xmlReader.NodeType != XmlNodeType.EndElement) {
                                    if (xmlReader.Name == "item")
                                        objs.Add(xmlReader.ReadElementContentAs(xmlReader.ValueType, null));
                                }
                                properties.Add(name, objs.ToArray());
                                break;
                            }

                        }

                    }
                } while(xmlReader.Read());
            }

            UpdateNode (node, properties);
        }
コード例 #6
0
ファイル: XmlSerializer.cs プロジェクト: flipback/Galilei
        public override string Serialize(Node node, Type typeAttr)
        {
            XpcaProxy proxy = new XpcaProxy(node);
            StringWriter sw = new StringWriter();

            using(XmlWriter xmlWriter = new XmlTextWriter(sw))
            {
                xmlWriter.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
                xmlWriter.WriteStartElement("root");
                foreach (KeyValuePair<string, PropertyInfo> property in proxy.GetPropertiesFor(typeAttr)) {

                    object value = proxy[property.Key];
                    if (value != null) {
                        xmlWriter.WriteStartElement(property.Key);
                        if(value is IEnumerable<object>) {
                            foreach (object obj in (value as IEnumerable<object>)) {
                                xmlWriter.WriteStartElement("item");
                                XmlWriteValue(xmlWriter, obj);
                                xmlWriter.WriteEndElement();
                            }

                        }
                        else {
                            XmlWriteValue(xmlWriter, value);
                        }
                        xmlWriter.WriteEndElement();
                    }
                }
                xmlWriter.WriteEndElement();
            }

            return sw.ToString();
        }
コード例 #7
0
ファイル: XpcaProxy.cs プロジェクト: flipback/Galilei
        public void Catch(Node node)
        {
            this.node = node;

            NodeAttribute nodeAttr =  Array.Find(node.GetType().GetCustomAttributes(false), delegate (object attr) {
                return attr is NodeAttribute;
            }) as NodeAttribute;

            if (nodeAttr != null) {
                typeName = node.GetType().Name;
            }
            else {
                throw new XpcaTypeError(node.GetType().Name);
            }

            // Getting XPCA properties from type

            List<PropertyInfo> props = new List<PropertyInfo>();

            GetProperties(node.GetType(), props);
            props.RemoveAll(delegate(PropertyInfo p){
                return GetAttribute(p) == null;
            });

            properties = new Dictionary<string, PropertyInfo>();
            foreach (PropertyInfo property in props) {
                properties.Add(
                    property.Name.Substring(0,1).ToLower() + property.Name.Substring(1),
                    property
                );
            }
        }
コード例 #8
0
        public void SetUp()
        {
            root = new Root();
            root["/"] = new Node("node_1");
            root["/node_1"] = new Node("node_2");

            serializer = new JsonSerializer(typeof(Node));
        }
コード例 #9
0
ファイル: Serializer.cs プロジェクト: flipback/Galilei
 protected void UpdateNode(Node node, Dictionary<string, object> properties)
 {
     proxy = new XpcaProxy(node);
     //Set properties
     foreach (KeyValuePair<string, object> property in properties) {
         object value = property.Value;
         if (value.ToString().IndexOf("xpca:/") > -1) {
             value = proxy.Node.Root[value.ToString().Replace("xpca:/", "")];
         }
         proxy[property.Key] = value;
     }
 }
コード例 #10
0
ファイル: Galilei.cs プロジェクト: flipback/Galilei
 private void OnConfig(Node node)
 {
     queueToSave.Enqueue(node);
     saveTimer.Stop();
     saveTimer.Start();
 }
コード例 #11
0
ファイル: TreeBuilder.cs プロジェクト: flipback/Galilei
 private void OnConfig(Node node)
 {
     if (ConfigChange != null) {
         ConfigChange(node);
         hasConfigChanges = false;
     }
 }
コード例 #12
0
ファイル: Serializer.cs プロジェクト: flipback/Galilei
 public abstract string Serialize(Node node, Type typeAttr);
コード例 #13
0
ファイル: Serializer.cs プロジェクト: flipback/Galilei
 public string Serialize(Node node)
 {
     return Serialize(node, typeof(PropertyAttribute));
 }
コード例 #14
0
ファイル: Serializer.cs プロジェクト: flipback/Galilei
 public abstract void Deserialize(Node node, string data);
コード例 #15
0
ファイル: Root.cs プロジェクト: flipback/Galilei
 public void Add(string path, Node node)
 {
     node.Parent = Get(path);
 }
コード例 #16
0
ファイル: Configurator.cs プロジェクト: flipback/Galilei
        private void Save(Node node, JsonTextWriter jsonWriter)
        {
            jsonWriter.Formatting = Formatting.Indented;
            jsonWriter.WritePropertyName(node.FullName);
            jsonWriter.WriteStartObject();
            XpcaProxy proxy = new XpcaProxy(node);

            foreach (KeyValuePair<string, PropertyInfo> property in proxy.GetPropertiesFor(typeof(ConfigAttribute))) {

                object value = proxy[property.Key];

                if (value != null ) {
                    jsonWriter.WritePropertyName(property.Key);
                    if(value is Node) {
                        jsonWriter.WriteValue("xpca:/" + ((Node)value).FullName);
                    }
                    else {
                        jsonWriter.WriteValue(value.ToString());
                    }
                }
            }

            jsonWriter.WriteEndObject();

            foreach(Node ch in node.Children) {
                Save(ch, jsonWriter);
            }
        }
コード例 #17
0
ファイル: XpcaProxy.cs プロジェクト: flipback/Galilei
 public XpcaProxy(Node node)
 {
     Catch(node);
 }