c# - 使用 Json.net 解析 JSON

标签 c# parsing serialization 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
        }
    } ]
}

我真正需要的唯一数据是对象数组中的内容。我是否可以使用 JSonTextReader 之类的东西来解析它,然后只提取我想要的东西,比如 OBJECT_TYPE 和 x 和 y 位置?我似乎无法让 JSonTextReader 以我想要的方式工作,而且我几乎没有发现它的用法示例。

似乎先序列化然后对我的对象使用 LINQ 是理想的,我找到的每个示例都讨论了先序列化 JSON,但我不确定如何为这个结构构建对象。特别是对象数组,它需要类似于属性和位置对象对的列表。我不知道如何编写对象代码以便 JSon.Net 知道如何序列化它。

我想我可以编写自己的简单解析器,将我需要的所有内容提取到我创建的属性对象中,但我运气不佳。

希望这一切都有意义,有什么想法吗?

最佳答案

我不知道 JSON.NET,但它与 System.Web.Extensions.dll (.NET 3.5 SP1) 中的 JavaScriptSerializer 配合使用时效果很好:

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);

链接:Serializing and Deserializing JSON with Json.NET

关于c# - 使用 Json.net 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/401756/

相关文章:

parsing - 现代编译器使用哪些解析器?

c# - FtpWebRequest 类是可序列化的吗?

python - 我如何处理 django 嵌套模型?

c# - 如何在 Blazor 服务器应用程序的服务注册中将访问 token 注入(inject)到 HttpClient?

C# - 使用自定义键定义哈希集

ruby-on-rails - Ruby 1.9.1 flog gem 解析错误值 nil (tNL)

c# - C# 中的字典数据序列化

c# - LINQ 中的连接/联合表

c# - 在 C# 中引发事件的这些可能性之间有什么区别?

Java jsoup 日期解析异常