为了账号安全,请及时绑定邮箱和手机立即绑定

使用[JsonConvert()]时,JSON.Net引发StackOverflow

使用[JsonConvert()]时,JSON.Net引发StackOverflow

C#
慕运维8079593 2019-12-06 10:54:00
我将这些简单的代码写为Serialize类,以使其扁平化,但是当我使用[JsonConverter(typeof(FJson))]批注时,它将引发StackOverflowException。如果我SerializeObject手动拨打电话,它可以正常工作。如何在注释模式下使用JsonConvert:class Program    {        static void Main(string[] args)        {            A a = new A();            a.id = 1;            a.b.name = "value";            string json = null;            // json = JsonConvert.SerializeObject(a, new FJson()); without [JsonConverter(typeof(FJson))] annotation workd fine            // json = JsonConvert.SerializeObject(a); StackOverflowException            Console.WriteLine(json);            Console.ReadLine();        }    }    //[JsonConverter(typeof(FJson))] StackOverflowException    public class A    {        public A()        {            this.b = new B();        }        public int id { get; set; }        public string name { get; set; }        public B b { get; set; }    }    public class B    {        public string name { get; set; }    }    public class FJson : JsonConverter    {        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)        {            JToken t = JToken.FromObject(value);            if (t.Type != JTokenType.Object)            {                t.WriteTo(writer);                return;            }            JObject o = (JObject)t;            writer.WriteStartObject();            WriteJson(writer, o);            writer.WriteEndObject();        }        private void WriteJson(JsonWriter writer, JObject value)        {            foreach (var p in value.Properties())            {                if (p.Value is JObject)                    WriteJson(writer, (JObject)p.Value);                else                    p.WriteTo(writer);            }        }        public override object ReadJson(JsonReader reader, Type objectType,           object existingValue, JsonSerializer serializer)        {            throw new NotImplementedException();        }
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 719 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信