Должна ли сериализованная / десериализованная строка подключения быть чувствительной к регистру? - PullRequest
0 голосов
/ 15 июля 2011

Как я могу десериализовать строку с учетом регистра? Похоже, что сериализация чувствительна к регистру, какой смысл в десериализации, не чувствительны к регистру ??

enter image description here

ОБНОВЛЕНИЕ : пытаясь определить, где и что происходит, я настроил отладчик для загрузки символов и вошел в код FCL .NET. Я застрял рядом с этим кодом (строки DbConnectionOptions.cs 873-921):

private static NameValuePair ParseInternal(Hashtable parsetable, string connectionString, bool buildChain, Hashtable synonyms, bool firstKey) {
    Debug.Assert(null != connectionString, "null connectionstring"); 
    StringBuilder buffer = new StringBuilder();
    NameValuePair localKeychain = null, keychain = null;

        int nextStartPosition = 0; 
        int endPosition = connectionString.Length; 
        while (nextStartPosition < endPosition) {
            int startPosition = nextStartPosition; 

            string keyname, keyvalue;
            nextStartPosition = GetKeyValuePair(connectionString, startPosition, buffer, firstKey, out keyname, out keyvalue);
            if (ADP.IsEmpty(keyname)) { 
                // if (nextStartPosition != endPosition) { throw; }
                break; 
            } 

            string realkeyname = ((null != synonyms) ? (string)synonyms[keyname] : keyname);
            if (!IsKeyNameValid(realkeyname)) { 
                throw ADP.KeywordNotSupported(keyname); 
            }

Модификация происходит где-то внутри цикла while, который ищет другую пару ключ / значение в каждой итерации. К сожалению, я не могу добавить наблюдение к переменным keyname и realkeyname. Полагаю, здесь также важны синонимы Hashtable.

  • как я могу увидеть эти значения переменных?
  • что мне делать дальше, чтобы наконец найти точное место модификации?

Ответы [ 2 ]

5 голосов
/ 15 июля 2011

Потому что ( согласно документации ) для строк подключения:

Ключевые слова не чувствительны к регистру.

Однако значения чувствительны к регистру (очевидно, для паролей и т. Д.)

0 голосов
/ 15 июля 2011

Сериализация определенно чувствительна к регистру, однако строка подключения не обязательно должна быть - вы уверены, что ваше свойство ConnectionString не делает что-то странное, например:

public string ConnectionString
{
    get
    {
        return this._ConnectionString;
    }
    set
    {
        this._ConnectionString = value != null ? value.ToLower() : null;
    }
}

Обратите внимание, что1004 *, кажется, выполняет некоторую "нормализацию" строк соединения, то есть "странность" не обязательно должна присутствовать в вашем коде.

Попробуйте выполнить info.GetValue("ConnectionString", typeof(string)); в отладчике и посмотрите, что вы получите.

...