public void AddChildAttribute(JSONObject child, string Raw)
{
child.Parent = this;
child.Raw = Raw;
int split = Raw.IndexOf(':');
if (split == -1) { return; }
string[] items = new string[2];
items[0] = Raw.Substring(0, split);
items[1] = Raw.Substring(split + 1);
child.Name = items[0].Replace("\"", "").Trim();
if (items[1].Trim().StartsWith("\""))
{
child.ValueType = JSONType.String;
string v = items[1].Replace("\\\"", "|||||");
v = v.Replace("\"", "");
v = v.Replace("|||||", "\\\"");
child.Value = v.Trim();
}
else if (items[1].Trim().StartsWith("'"))
{
child.ValueType = JSONType.String;
child.Value = items[1].Replace("'", "").Trim();
}
else if (items[1].Trim().CanConvert(typeof(System.Int32)))
{
child.ValueType = JSONType.Number;
child.Value = Convert.ToInt32(items[1]);
}
else if (items[1].Trim().CanConvert(typeof(bool)))
{
child.ValueType = JSONType.Boolean;
child.Value = Convert.ToBoolean(items[1].Trim());
}
else if (items[1].FirstVisibleCharacter() == '[' && items[1].LastVisibleCharacter() == ']')
{
items[1] = items[1].RemoveIfFirst('[').RemoveIfLast(']');
char next = items[1].FirstVisibleCharacter();
if (next == '{') //We are dealing with Objects here.
{
child.ValueType = JSONType.ObjectArray;
child.Deserialize(items[1]);
}
else // Raw text
{
child.ValueType = JSONType.Raw;
child.Value = items[1];
}
}
else if (items[1].FirstVisibleCharacter() == '{')
{
child.ValueType = JSONType.Object;
items[1] = items[1].RemoveIfFirst('{').RemoveIfLast('}');
List<JSONObject> props = SplitObjects(items[1]);
foreach (JSONObject prop in props)
{
child.AddChildAttribute(prop, prop.Raw);
}
}
else
{
child.ValueType = JSONType.Raw;
child.Value = items[1].Trim();
}
this.ChildObjects.Add(child);
}