【问题标题】:Deserializing invalid json (containing javascript function call) using Json.net使用 Json.net 反序列化无效 json(包含 javascript 函数调用)
【发布时间】: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);
        }
    }

这在序列化上工作正常,但在反序列化阅读器上尝试转换为布尔值并在调用我的转换器之前抛出异常。

【问题讨论】:

标签: javascript c# json json.net


【解决方案1】:

非常感谢所有这些帮助。

我在反序列化之前使用正则表达式添加引号。

{"fill":{"color":[100,0,46,0.2]},"geometry":function (test) {
 alert('e');
}}

成为

{"fill":{"color":[100,0,46,0.2]},"geometry":"function (test) {
 alert('e');
}"}

我的代码:

jsonTxt = Regex.Replace(jsonTxt, @"(function\s*\(([,a-z]*)?\)\s*)(\{(.*?)?(\{(.*?)(\{(\{(.*?)\})*\})*\})*\})", delegate (Match match)
                        {
                            string v = match.ToString();
                            v = v.Replace("\"", "\\\"");
                            return $"\"{v}\"";
                        }
                        , RegexOptions.Singleline);

为了反序列化,我总是需要可能的转换器。

希望这可以帮助某人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多