我正在尝试使用JSon.Net库解析一些JSON。该文档似乎有点稀疏,我对如何完成所需的任务感到困惑。这是我需要解析的JSON格式。
{ "displayFieldName" : "OBJECT_NAME", "fieldAliases" : { "OBJECT_NAME" : "OBJECT_NAME", "OBJECT_TYPE" : "OBJECT_TYPE" }, "positionType" : "point", "reference" : { "id" : 1111 }, "objects" : [ { "attributes" : { "OBJECT_NAME" : "test name", "OBJECT_TYPE" : "test type" }, "position" : { "x" : 5, "y" : 7 } } ] }
我真正需要的唯一数据是对象数组中的内容。我是否可以使用JSonTextReader之类的东西来解析它,而仅仅取出我想要的东西,例如OBJECT_TYPE以及x和y位置?我似乎无法JSonTextReader按照自己想要的方式工作,而且我发现几乎没有使用它的示例。
JSonTextReader
看起来首先进行序列化,然后对我的对象使用LINQ似乎是理想的选择,我发现的每个示例都首先讨论了对JSON进行序列化,但是我不确定如何为该结构构建对象。特别是对象数组,需要像一对属性和位置对象对列表。我不知道如何编码对象,因此JSon.Net会知道如何序列化它。
我以为我可以编写自己的简单解析器,以将所需的所有内容提取到我创建的属性对象中,但是运气不佳。
希望这一切有意义,有什么想法吗?
我不了解JSON.NET,但JavaScriptSerializer在System.Web.Extensions.dll(.NET 3.5 SP1)中可以正常使用:
JavaScriptSerializer
System.Web.Extensions.dll
using System.Collections.Generic; using System.Web.Script.Serialization; public class NameTypePair { public string OBJECT_NAME { get; set; } public string OBJECT_TYPE { get; set; } } public enum PositionType { none, point } public class Ref { public int id { get; set; } } public class SubObject { public NameTypePair attributes { get; set; } public Position position { get; set; } } public class Position { public int x { get; set; } public int y { get; set; } } public class Foo { public Foo() { objects = new List<SubObject>(); } public string displayFieldName { get; set; } public NameTypePair fieldAliases { get; set; } public PositionType positionType { get; set; } public Ref reference { get; set; } public List<SubObject> objects { get; set; } } static class Program { const string json = @"{ ""displayFieldName"" : ""OBJECT_NAME"", ""fieldAliases"" : { ""OBJECT_NAME"" : ""OBJECT_NAME"", ""OBJECT_TYPE"" : ""OBJECT_TYPE"" }, ""positionType"" : ""point"", ""reference"" : { ""id"" : 1111 }, ""objects"" : [ { ""attributes"" : { ""OBJECT_NAME"" : ""test name"", ""OBJECT_TYPE"" : ""test type"" }, ""position"" : { ""x"" : 5, ""y"" : 7 } } ] }"; static void Main() { JavaScriptSerializer ser = new JavaScriptSerializer(); Foo foo = ser.Deserialize<Foo>(json); } }
编辑:
Json.NET使用相同的JSON和类进行工作。
Foo foo = JsonConvert.DeserializeObject<Foo>(json);
链接:使用Json.NET序列化和反序列化JSON