Прежде чем отмечать это как дубликат, я хотел бы сказать, что у меня есть собственная реализация JsonObject, и именно поэтому я прошу дать указания здесь.Разбирать массив JSON из строки JSON?
Я почесываю голову, как разобрать один или несколько массивов JSON из строки JSON. У меня есть следующий код:
class JsonObject
{
public struct JsonProperty
{
public String Name { get; set; }
public String Value { get; set; }
}
public Dictionary<String, JsonProperty> Properties;
public JsonObject()
{
Properties = new Dictionary<String, JsonProperty>();
}
public JsonObject(String jsonString)
{
Properties = new Dictionary<String, JsonProperty>();
ParseString(jsonString);
}
public JsonObject(List<String> properties)
{
Properties = new Dictionary<String, JsonProperty>();
foreach (String s in properties)
{
String[] keyvaluepair = s.Split(':');
JsonProperty prop = new JsonProperty();
prop.Name = keyvaluepair[0];
prop.Value = keyvaluepair[1];
Properties.Add(prop.Name, prop);
}
}
public void AddProperty(String name, String value)
{
JsonProperty prop = new JsonProperty();
prop.Name = name;
prop.Value = value;
Properties.Add(prop.Name, prop);
}
private void ParseString(String jsonString)
{
String[] splitByComma = jsonString.Split(',');
List<String[]> splitByColon = new List<String[]>();
foreach (String s in splitByComma)
{
String[] split = s.Split(':');
splitByColon.Add(split);
}
for (int i = 0; i < splitByColon.Count; i++)
{
for (int j = 0; j < splitByColon[i].Length; j++)
{
splitByColon[i][j] = splitByColon[i][j].Replace(",", "");
splitByColon[i][j] = splitByColon[i][j].Replace("}", "");
splitByColon[i][j] = splitByColon[i][j].Replace("{", "");
splitByColon[i][j] = splitByColon[i][j].Replace("\"", "");
splitByColon[i][j] = splitByColon[i][j].Replace("\\", "");
splitByColon[i][j] = splitByColon[i][j].Replace(":", "");
}
}
foreach (String[] array in splitByColon)
{
JsonProperty p = new JsonProperty();
p.Name = array[0];
p.Value = array[1];
Properties.Add(p.Name, p);
}
}
public override String ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("{");
int count = 1;
foreach (KeyValuePair<String, JsonProperty> p in Properties)
{
sb.Append("\"" + p.Key.ToString() + "\"");
sb.Append(":" + p.Value.Value.ToString());
if (count < Properties.Count)
{
sb.Append(",");
}
count++;
}
sb.Append("}");
return sb.ToString();
}
}
}
Это работает очень хорошо, но я мог бы спроектировал себя в угол, если бы я хотел взять на себя JSON массивах. Я мог бы получить строку, которая выглядит следующим образом:
{"SSN":"300391-1453","LoanAmount":50000.0,"LoanDuration":"2015/02/02","CreditScore":550,"Receipients":[{"bankXML":"bankXML","bankJSON":"bankJSON","bankWeb":"bankWeb"]}
И я невежественный, как бы я правильно вынуть этот массив, и как я бы хранить его. Моя идея состоит в том, что я нахожу массив и затем разбираю каждый объект внутри массива как JsonProperty, а затем сохраняю все свойства в JsonArray с именем.
Как бы я мог достичь этого?
есть почему вы не используете Javascript Serializer для перемещения между объектами .NET и JSON? – Hopdizzle
@Hopdizzle Я чувствовал, что конкретные объекты Json просто легче управлять если я хотел добавить/удалить свойства из строки. Я также не мог контролировать, что результат был из сериализатора, и это вызвало несколько проблем. – OmniOwl
@Vipar Существующий сериализатор позволяет десериализовать объекты Json тоже –