json字符串关键字替换

OVERSET2 2017-08-23 09:28:38
我用newtonsoft.json解析Json的,但是对方API返回的键值没有值时候就变成类似这样 "age":[],所以会导致,我实体类用string接收遇到[]就报错,我于是用正则替换

var vRex = new Regex(@"\[\]");
var s = vRex.Replace(strJson, "null");//去除空的[]


但是效率太低,就一点字符串竟然要1秒多,请问有什么高效的方法解决这样的问题?谢谢
...全文
721 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
by_封爱 版主 2017-08-23
  • 打赏
  • 举报
回复
其实你根本没必要替换. 返回[] 表示没有数据 你反序列化的集合是0啊...
xuzuning 2017-08-23
  • 打赏
  • 举报
回复
        static void Main(string[] args)
{
var s = "{'Name':'Test','Age':[]}";
var o = JObject.Parse(s);
Console.WriteLine(JsonConvert.SerializeObject(o, Formatting.Indented));
}

根本无需替换!
应该是你的实体类写的有问题
Anonymous477 2017-08-23
  • 打赏
  • 举报
回复

        static void Main(string[] args)
        {
            var test = JsonConvert.DeserializeObject<Test>("{\"Name\":\"Test\",\"Age\":[]}");
        }

        class Test
        {
            public string Name { get; set; }

            [JsonConverter(typeof(TestConverter))]
            public string Age { get; set; }
        }

        class TestConverter : JsonConverter
        {
            public override bool CanConvert(Type objectType)
            {
                return true;
            }

            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
            {
                var value = reader.Value;
                if (value == null)
                {
                    reader.Skip();
                    return null;
                }
                else
                {
                    return value;
                }
            }

            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
            {
                writer.WriteValue(value);
            }
        }
仅供参考,不知道效率怎么样,不过我觉得StringBuilder的Replace应该不会太慢吧。。。
OVERSET2 2017-08-23
  • 打赏
  • 举报
回复
我用另外一种方法同样慢

            var sb = new StringBuilder();
            sb.Append(strJson);
            sb.Replace("[]", "null");

qq852053457 2017-08-23
  • 打赏
  • 举报
回复
实体里面的age用object类型 用的时候再转换下

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧