【问题标题】:Override WriteJson with JSON.NET lib使用 JSON.NET 库覆盖 WriteJson
【发布时间】:2015-08-04 19:39:05
【问题描述】:

我有一个类 Person,它看起来像这样:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Hobbies { get; set; }
    public int Age { get; set; }
    public string Country {get; set;}
    public string Address { get; set; }
    public string Phone { get; set; }
    public string Gender { get; set; }
}

我想要的是重写 WriteJson 函数。我已经设法完成了 ReadJson。我希望我的 WriteJson 编写一个如下所示的 json 字符串: 最终目标是执行编写任何其他类型对象的列表。

@"{
          'Columns':['FirstName','LastName','Hobbies','Age','Country','Address','Phone','Gender'],
          'Rows':[
                  ['X', 'Y', 'Cuisine', '35', 'France', 'unknown', 'unknown', 'male'],
                  ['W', 'Z', 'Jouer', '43', 'France', 'unknown', 'unknown', 'male'],
                  ...]
 }";

我的 WriteJson 是这样的:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        IEnumerable collectionObj = value as IEnumerable;
        writer.WriteStartArray();

        foreach (object curObj in collectionObj)
        {
            writer.WriteStartObject();
            serializer.Serialize(writer, curObj);
            writer.WriteEndObject();
        }
        writer.WriteEndArray();
    }

编译时,我仍然有一个错误(我认为是因为我的 WriteStartArray),您能否确认我出了什么问题以及如何覆盖我的 WriteJson 函数以执行我想要的操作?

这是我得到的错误:

附加信息:处于 ObjectStart 状态的令牌 StartObject 将导致 JSON 对象无效。路径“[0]”。

感谢您的帮助。

【问题讨论】:

    标签: c# json.net overriding


    【解决方案1】:

    在您的foreach 循环中,您首先必须写下属性的名称。你的代码会写出类似这样的东西,它确实不是有效的 JSON:

    [
      {
        // serialized "curObj" goes here, for example:
        { "a": "b" }
      }
    ]
    

    serializer.Serialize(writer, curObj); 之前你必须写

    writer.WritePropertyName("PropertyName");
    

    所以 JSON 看起来像这样:

    [
      {
        // serialized "curObj" goes here, AFTER property name:
        "PropertyName": { "a": "b" }
      }
    ]
    

    【讨论】:

    • 谢谢。所以我的属性名是列和行。然后我可以写我的序列化数据 json 字符串是否以 { [property: content] } 开头还是这样:[ { property: content} ] (我是 json.net 的新用户,所以如果你能确认我你会怎么写。
    • 嗯,它是 JavaScript 语法。所以一个数组由[value, value, ...] 和一个{ propertyname: value, propertyname: value, ... } 的对象组成。而value 又可以是数组或对象。所以在你的情况下,它是[ { name: value, ... }, { ... } ]。
    猜你喜欢
    • 2015-08-03
    • 2017-02-20
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多