Car*_*ter 111 c# serialization parsing json.net
我正在尝试使用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
}
} ]
}
Run Code Online (Sandbox Code Playgroud)
我真正需要的唯一数据是对象数组中的东西.我是否有可能通过JSonTextReader之类的东西来解析它,只是拉出我想要的东西,比如OBJECT_TYPE和x和y位置?我似乎无法JSonTextReader以我想要的方式工作,而且我发现很少甚至没有使用它的例子.
看起来首先序列化然后使用LINQ与我的对象是理想的,我发现的每个例子都讨论首先序列化JSON,但我不确定如何为这个结构构建一个对象.特别是对象数组,它需要类似于属性和位置对象列表.我不知道如何编写我的对象,以便JSon.Net知道如何序列化它.
我以为我可以编写自己的简单解析器来将我需要的所有东西都拉到我创建的属性对象中,但我运气不好.
希望这一切都有意义,任何想法?
Mar*_*ell 129
我不知道JSON.NET,但它适用JavaScriptSerializer于System.Web.Extensions.dll(.NET 3.5 SP1):
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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
Json.NET使用相同的JSON和类.
Foo foo = JsonConvert.DeserializeObject<Foo>(json);
Run Code Online (Sandbox Code Playgroud)
小智 10
编辑:感谢Marc,阅读struct vs class问题,你说对了,谢谢!
我倾向于使用以下方法来执行您所描述的内容,使用JSon.Net的静态方法:
MyObject deserializedObject = JsonConvert.DeserializeObject<MyObject>(json);
Run Code Online (Sandbox Code Playgroud)
对于Objects列表,我是否可以建议使用由您自己的小类包含attributes和position类创建的泛型列表.您可以为X和Y 使用Point结构System.Drawing(System.Drawing.Point或System.Drawing.PointF浮点数).
对象创建后,它是多容易让你与文本分析你,否则看后是数据.