Удалите экранирующий символ '\' из динамического JSON с помощью ExpandoObject и IDictionary

Я создаю динамический JSON, используя ExpandoObject и IDictionary.

Мой пример кода выглядит следующим образом:

DataTable dt_MappedColumns = new DataTable();
    dt_MappedColumns.Columns.Add("Sr.No");
    dt_MappedColumns.Columns.Add("TColumnName");
    dt_MappedColumns.Columns.Add("AColumnName");
    dt_MappedColumns.Rows.Add("1", "Apple", "Lion");
    dt_MappedColumns.Rows.Add("2", "Orange", "Tiger");
    dt_MappedColumns.Rows.Add("3", "Mango", "Fox");
    dt_MappedColumns.Rows.Add("4", "Orange", "Wolf");

    var dictionary1 = new Dictionary<string, object>();
    foreach (DataRow dr in dt_MappedColumns.Rows)
    {
        string key = dr["TColumnName"].ToString();
        string value = dr["AColumnName"].ToString();

        if (!dictionary1.ContainsKey(key))
        {
            // key does not already exist, so add it
            dictionary1.Add(key, value);
        }
        else
        {
            // key exists, get the existing value
            object existingValue = dictionary1[key];

            if (existingValue is string)
            {
                // replace the existing string value with a list
                dictionary1[key] = new List<string> { (string)existingValue, value }; 
            }
            else
            {
                // the existing value is a list, so just add the new value to it
                ((List<string>)existingValue).Add(value);
            }
        }
    }

    string Manjson = JsonConvert.SerializeObject(dictionary1);

Строка JSON, полученная таким образом, показана ниже с символом Escape {\}:

"{\"Яблоко\":\"Лев\",\"Апельсин\":[\"Тигр\",\"Волк\"],\"Манго\":\"Лиса\"}".

Я хочу удалить символ Escape {\}, и желаемый JSON будет выглядеть следующим образом:

"{"Яблоко":"Лев", "Апельсин":["Тигр","Волк"], "Манго":"Лис"}"

**** РЕДАКТИРОВАТЬ ****

Интересно, что если я печатаю JSON в консоли, он без Escape-символа, но когда я вставляю в таблицу Oracle DB, он вставляется с Escape-символом.

Использование Visual Studio 2010 Professional с Oracle 11g и PL/SQL 11.2

Каким будет решение для этого:

Любая помощь приветствуется :)


person Mufaddal    schedule 07.12.2018    source источник
comment
Вы говорите, что JSON на самом деле содержит символ косой черты? Если вы просматриваете строку в отладчике, вы ожидаете увидеть эти косые черты   -  person Martin    schedule 07.12.2018
comment
Что используется для проверки того, что косая черта действительно находится в строке. Более вероятно, что он экранируется только любым инструментом отладки, который вы используете.   -  person phuzi    schedule 07.12.2018
comment
Возможный дубликат Удалить только \ из JSON   -  person phuzi    schedule 07.12.2018


Ответы (1)


Я решил проблему, преобразовав ее в JObject, а затем используя ее следующим образом:

используя Newtonsoft.Json.Linq;

var Varjson = JObject.Parse(Manjson);

где Manjson — моя строка JSON с escape-символами ('/').

Объект Varjson будет содержать десериализованный Json без escape-символа, как показано ниже:

{Яблоко: Лев, Апельсин: [Тигр, Волк], Манго: Лиса}

:)

person Mufaddal    schedule 11.12.2018