Esempio n. 1
0
        public string XmlToJson(string Xml)
        {
            StringWriter JW = new StringWriter();
            JsonTextWriter JTW = new JsonTextWriter(JW);
            JTW.Formatting = Newtonsoft.Json.Formatting.Indented;
            StringReader XSR = new StringReader(Xml.Trim());
            XmlReader XR = XmlReader.Create(XSR);

            string ValType = "";
            bool InArray = false;

            XR.Read();
            if (!(XR.NodeType == XmlNodeType.Element && XR.Name == "xml"))
            {
                throw new  Exception("Invalid XML Input");
            }
            bool Read = true;
            bool NextRead = false;

            try
            {
                if (XR.GetAttribute("in_array") == "1") InArray = true;
            }
            catch{}

            while (Read)
            {
                if (! NextRead)
                {
                    Read = XR.Read();
                }
                NextRead = false;
                switch(XR.NodeType)
                {
                    case (XmlNodeType.Element):
                        switch(XR.Name)
                        {
                            case("obj"):
                                JTW.WriteStartObject();
                                break;
                            case ("arr"):
                                JTW.WriteStartArray();
                                break;
                            case("cons" ):
                                JTW.WriteStartConstructor("");
                                break;
                            case ("num"):
                            case ("str"):
                            case ("bool"):
                            case ("undef" ):
                                ValType = XR.Name;
                                Read = XR.Read();
                                NextRead = true;
                                if (XR.NodeType == XmlNodeType.EndElement)
                                {
                                    JTW.WriteValue("");
                                }
                                break;
                            case("prop"):
                                JTW.WritePropertyName(XR.GetAttribute("oname"));
                                break;
                        }
                        break;
                    case (XmlNodeType.EndElement ):
                        switch(XR.Name)
                        {
                            case("obj"):
                                JTW.WriteEndObject();
                                break;
                            case("arr"):
                                JTW.WriteEndArray();
                                break;
                            case("cons" ):
                                JTW.WriteEndConstructor();
                                break;
                        }
                        break;
                    case(XmlNodeType.Text):
                        switch(ValType)
                        {
                            case("num"):
                                try
                                {
                                    JTW.WriteValue(Int32.Parse(XR.Value.Trim()));
                                }
                                catch
                                {
                                    try
                                    {
                                        JTW.WriteValue(float.Parse(XR.Value.Trim()));
                                    }
                                    catch
                                    {
                                        JTW.WriteValue(XR.Value);
                                    }
                                }
                                break;
                            case("str"):
                                JTW.WriteValue(XR.Value.ToString());
                                break;
                            case("bool"):
                                if (XR.Value.ToString().Equals("1"))
                                {
                                    JTW.WriteValue(true);
                                }
                                else if(XR.Value.ToString().Equals("0"))
                                {
                                    JTW.WriteValue(false);
                                }
                                else
                                {
                                    JTW.WriteValue(XR.Value);
                                }
                                break;
                            case("undef"):
                                if (XR.Value.ToString() == "null")
                                {
                                    JTW.WriteNull();
                                }
                                else
                                {
                                    JTW.WriteValue(XR.Value.ToString());
                                }
                                break;
                        }
                        break;
                }
            }
            JTW.Close();
            if (InArray)
            {
                return string.Format("[{0}]",JW.ToString().Trim());
            }
            else
            {
                return JW.ToString().Trim();
            }
        }
    public void WriteObjectNestedInConstructor()
    {
      StringBuilder sb = new StringBuilder();
      StringWriter sw = new StringWriter(sb);

      using (JsonWriter jsonWriter = new JsonTextWriter(sw))
      {
        jsonWriter.WriteStartObject();
        jsonWriter.WritePropertyName("con");

        jsonWriter.WriteStartConstructor("Ext.data.JsonStore");
        jsonWriter.WriteStartObject();
        jsonWriter.WritePropertyName("aa");
        jsonWriter.WriteValue("aa");
        jsonWriter.WriteEndObject();
        jsonWriter.WriteEndConstructor();

        jsonWriter.WriteEndObject();
      }

      Assert.AreEqual(@"{""con"":new Ext.data.JsonStore({""aa"":""aa""})}", sb.ToString());
    }
Esempio n. 3
0
 public static string SyncJsonObjectTypes(string OldJson, string NewJson)
 {
     StringReader NSR = new StringReader(NewJson);
     JsonTextReader New = new JsonTextReader(NSR);
     StringReader OSR = new StringReader(OldJson);
     JsonTextReader Old = new JsonTextReader(OSR);
     StringWriter SW = new StringWriter();
     JsonTextWriter Writer = new JsonTextWriter(SW);
     while (New.Read() && Old.Read())
     {
         if ((Old.TokenType == JsonToken.Integer) && (New.TokenType != JsonToken.Integer))
         {
             int NewIntValue = 0;
             if (Int32.TryParse(New.Value.ToString(), out NewIntValue))
             {
                 Writer.WriteValue(NewIntValue);
             }
             else
             {
                 Writer.WriteValue(New.Value);
             }
         }
         else if ((Old.TokenType == JsonToken.Float) && (New.TokenType != JsonToken.Float))
         {
             float NewFloatValue = 0;
             if (float.TryParse(New.Value.ToString(), out NewFloatValue))
             {
                 Writer.WriteValue(NewFloatValue);
             }
             else
             {
                 Writer.WriteValue(New.Value);
             }
         }
         else if ((Old.TokenType == JsonToken.Boolean) && (New.TokenType != JsonToken.Boolean))
         {
             string Value = New.Value.ToString();
             if (Value.Equals("true"))
             {
                 Writer.WriteValue(true);
             }
             else if (Value.Equals("false"))
             {
                 Writer.WriteValue(false);
             }
             else
             {
                 Writer.WriteValue(New.Value);
             }
         }
         else if ((Old.TokenType == JsonToken.String) && (New.TokenType == JsonToken.Null))
         {
             Writer.WriteValue("");
         }
         else if ((Old.TokenType == JsonToken.StartArray) && (New.TokenType == JsonToken.String))
         {
             Old.Read();
             if (Old.TokenType == JsonToken.EndArray)
             {
                 Writer.WriteValue(JsonToken.StartArray);
                 if (New.Value.ToString() != "") Writer.WriteValue(New.Value);
                 Writer.WriteValue(JsonToken.EndArray);
             }
             else
             {
                 Writer.WriteValue(New.Value);
             }
         }
         else
         {
             if (Old.TokenType != New.TokenType)
             {
                 Writer.Close();
                 New.Close();
                 Old.Close();
                 return NewJson;
             }
             else if (New.TokenType == JsonToken.PropertyName)
             {
                 if (Old.Value == null || New.Value == null)
                 {
                     Writer.Close();
                     New.Close();
                     Old.Close();
                     return NewJson;
                 }
                 else if (!Old.Value.ToString().Equals(New.Value.ToString()))
                 {
                     Writer.Close();
                     New.Close();
                     Old.Close();
                     return NewJson;
                 }
             }
             switch (New.TokenType)
             {
                 case JsonToken.StartConstructor:
                     Writer.WriteStartConstructor("");
                     break;
                 case JsonToken.EndConstructor:
                     Writer.WriteEndConstructor();
                     break;
                 case JsonToken.StartObject:
                     Writer.WriteStartObject();
                     break;
                 case JsonToken.EndObject:
                     Writer.WriteEndObject();
                     break;
                 case JsonToken.StartArray:
                     Writer.WriteStartArray();
                     break;
                 case JsonToken.EndArray:
                     Writer.WriteEndArray();
                     break;
                 case JsonToken.PropertyName:
                     Writer.WritePropertyName(New.Value.ToString());
                     break;
                 case JsonToken.String:
                 case JsonToken.Integer:
                 case JsonToken.Boolean:
                 case JsonToken.Date:
                 case JsonToken.Null:
                 case JsonToken.Float:
                     Writer.WriteValue(New.Value);
                     break;
             }
         }
     }
     return SW.ToString();
 }