我正在查询由其他开发人员构建的Web服务。它以类似JSON的格式返回结果集。我得到三个列值(我已经知道每列的序数位置意味着什么):
[["Boston","142","JJK"],["Miami","111","QLA"],["Sacramento","042","PPT"]]
实际上,这个结果集可能有数千条记录。
解析此字符串的最佳方法是什么?
我猜JSON反序列化器会很好,但在C#/ .NET中使用什么是好的?我很确定System.Runtime.Serialization.Json序列化程序不起作用。
答案 0 :(得分:1)
this怎么样?
答案 1 :(得分:1)
使用asp.net(System.Runtime.Serialization
和System.ServiceModel.Web
)的内置库,您可以轻松获得所需内容:
string[][] parsed = null;
var jsonStr = @"[[""Boston"",""142"",""JJK""],[""Miami"",""111"",""QLA""],[""Sacramento"",""042"",""PPT""]]";
using (var ms = new System.IO.MemoryStream(System.Text.Encoding.Default.GetBytes(jsonStr)))
{
var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(string[][]));
parsed = serializer.ReadObject(ms) as string[][];
}
一个更复杂的例子(这是我最初的答案) 首先创建一个用于序列化的虚拟类。它只需要一个成员来保存结果,该结果应该是string [] []类型。
[DataContract]
public class Result
{
[DataMember(Name="d")]
public string[][] d { get; set; }
}
然后就像将结果包装起来一样简单:{ "d": /your results/ }
。请参阅下面的示例:
Result parsed = null;
var jsonStr = @"[[""Boston"",""142"",""JJK""],[""Miami"",""111"",""QLA""],[""Sacramento"",""042"",""PPT""]]";
using (var ms = new MemoryStream(Encoding.Default.GetBytes(string.Format(@"{{ ""d"": {0} }}", jsonStr))))
{
var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Result));
parsed = serializer.ReadObject(ms) as Result;
}
答案 2 :(得分:0)
听起来你有一个非常简单的格式,你可以编写一个自定义解析器,因为你并不总是想等它解析并在它使用之前返回整个东西。
我只想编写一个递归解析器来查找标记“[”,“,”,“\”“和”]“并执行相应的操作。