【发布时间】:2018-10-31 13:55:54
【问题描述】:
我必须序列化/反序列化包含 javascript 函数的无效 json,例如
{"Style":{"geometry":myFunction()}}
我正在为我的财产使用自定义转换器
[JsonConverter(typeof(PlainJsonStringConverter))]
public string geometry { get; set; }
public class FunctionSerializer : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(bool));
}
public override bool CanRead
{
get {
return true; }
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
Object result = null;
//TODO
return result;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
string valueAsString = Convert.ToString(value);
if (!string.IsNullOrWhiteSpace(valueAsString))
writer.WriteRawValue(valueAsString);
}
}
这在序列化上工作正常,但在反序列化阅读器上尝试转换为布尔值并在调用我的转换器之前抛出异常。
【问题讨论】:
-
使用 Json.Net 将无法做到这一点。函数不是有效的 JSON,因此 JSON 解析器不支持它。在解析器已经解析了输入之后调用转换器,但是解析器失败了。
-
我看到的继续使用 Json.Net 的唯一选择是根据 newtonsoft.com/json/help/html/CustomJsonReader.htm 实现自定义 JsonReader
-
您可以使用 Json.NET 编写格式错误的 JSON,请参阅 How to deserialize dodgy JSON (with improperly quoted strings, and missing brackets)?。但是要读取格式不正确的 JSON,您可能需要编写或子类化
JsonTextReader。或者可能不是;你能指定myFunction()字符串的确切语法吗?它会包含空格吗?
标签: javascript c# json json.net