0

次の問題があります。URLクエリ文字列によって渡されるJsonオブジェクトを解析したい

例えば

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

利用した

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

しかし、 Deserialize メソッドを呼び出すと、エラーが発生します

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 に答える