0

我有以下问题,我想解析一个我通过 url 查询字符串传递的 Json 对象

例如

...&json={tags=[tag1,tag2]}

我用过

JsonConvert.DeserializeObject<Dictionary<string, object>>(json)

但是当调用反序列化方法时出现错误

Newtonsoft.Json.JsonReaderException : Unexpected character encountered while parsing value: d. Line 1, position 8.

如果我传入字符串

"{tags:[\"tag1\",\"tag2\"]}

它工作正常,我不希望我的用户必须添加 "" 引号

有没有办法解决这个问题?

4

1 回答 1

0

伪代码对于一个解决方案可能是......

获取 json 查询字符串元素。

第一个拆分等于“=”。

抓取“{tags=[”和“]}”之间的所有文本

将该文本拆分为“,”

修剪项目中的任何空白。

将它们重新组合在一起,但在它们周围加上引号并用逗号分隔它们。

将该值放回“{tags=[”和“]}”之间,即“{tags=[”+newValue+“]}”

这是一些示例 C# 代码...

        [Test]
        public void TestHack()
        {
            string almost = "{tags=[tag1,tag2]}";
            string json = this.HackToJson(almost);
            Trace.WriteLine(json);
        }
        public string HackToJson(string almostJson)
        {
            if( almostJson.StartsWith("{tags=[") && almostJson.EndsWith("]}"))
            {
                int tagsLen = "{tags=[".Length;
                string tags = almostJson.Substring(tagsLen, almostJson.Length - (tagsLen + 2));

                var items = tags.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                var itemsCleaned = (from c in items select "\"" + c.Trim() + "\"");

                var jsonpart = string.Join(",", itemsCleaned);

                var json = string.Format("{{tags=[{0}]}}", jsonpart);

                return json;

            }
            throw new NotImplementedException("not sure what to do here... ");
        }
于 2012-08-09T12:58:08.017 回答