用JSON重写WriteJson.网络自由

本文关键字:网络 自由 WriteJson 重写 JSON | 更新日期: 2023-09-27 18:06:10

我有一个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字符串,看起来像这样:最终目标是执行编写任何其他类型对象的list。

@"{
          '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'],
                  ...]
 }";

My 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的Token StartObject将导致无效的JSON对象。路[0]。

谢谢你的帮助。

用JSON重写WriteJson.网络自由

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" }
  }
]