用 JSON.NET 库覆盖 WriteJson
Override WriteJson with JSON.NET lib
我有一个 class 看起来像这样的人:
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 函数来做我想做的事情?
这是我收到的错误:
Additional information: Token StartObject in state ObjectStart would result in an invalid JSON object. Path '[0]'.
感谢您的帮助。
在你的 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" }
}
]
我有一个 class 看起来像这样的人:
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 函数来做我想做的事情?
这是我收到的错误:
Additional information: Token StartObject in state ObjectStart would result in an invalid JSON object. Path '[0]'.
感谢您的帮助。
在你的 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" }
}
]