以下是我们输入JSON的示例:
“书籍”:{ “6”:{ “名字”:“有些书” }, “7”:{ “名字”:“其他一些书” } }
在一个完美的世界里,api(我无法改变)会改为:
“书籍”:[ { “ID”:“6”, “名字”:“有些书” }, { “ID”:“7”, “名字”:“其他一些书” }]
是否可以编写一个JsonConverter,将顶部的例子推到这个:
[DataContract]
public class Book
{
[DataMember(Name = "ID")]
public int ID { get; set; }
[DataMember(Name = "Name")]
public string Name { get; set; }
}
由于
}
答案 0 :(得分:1)
不幸的是,它只是没有格式良好的JSON将抛出任何处理JSON的库。大括号总是以相同的方式解释,所以除非比我更了解JSON的人有更好的想法,否则我认为最好的办法是做一些手动处理。
如果错误格式化是一致的,那么您可以使用正则表达式用方括号替换错误放置的花括号,然后解析它是格式良好的JSON。
祝你好运!答案 1 :(得分:0)
如果输入文档的结构定义相当严格,您可以尝试更正文档以便解析,然后将文档翻译成您的格式。
// reference Newtonsoft.Json.dll
// using Newtonsoft.Json
// using Newtonsoft.Json.Linq
string badJson = "\"Books\": { \"6\": { \"Name\": \"Some book\" }, \"7\": { \"Name\": \"Some other book\" } }";
var source = JObject.Parse(string.Format("{{{0}}}", badJson));
var sb = new StringBuilder();
using (var writer = new JsonTextWriter(new StringWriter(sb)))
{
writer.Formatting = Newtonsoft.Json.Formatting.None;
writer.WriteStartObject();
writer.WritePropertyName("Books");
writer.WriteStartArray();
foreach (JToken child in source["Books"])
{
JProperty prop = child as JProperty;
writer.WriteStartObject();
writer.WritePropertyName("ID");
writer.WriteValue(prop.Name);
writer.WritePropertyName("Name");
writer.WriteValue((string)prop.Value["Name"]);
writer.WriteEndObject();
}
writer.WriteEndArray();
writer.WriteEndObject();
}
Console.WriteLine(sb.ToString());
此代码生成以下JSON:
{"Books":[{"ID":"6","Name":"Some book"},{"ID":"7","Name":"Some other book"}]}