На самом деле я сделал небольшую «библиотеку» для этого, откройте в POST новое окно:
// Arguments :
// verb : 'GET'|'POST'
// target : an optional opening target (a name, or "_blank"), defaults to "_self"
window.io = {
open: function(verb, url, data, target){
var form = document.createElement("form");
form.action = url;
form.method = verb;
form.target = target || "_self";
if (data) {
for (var key in data) {
var input = document.createElement("textarea");
input.name = key;
input.value = typeof data[key] === "object"
? JSON.stringify(data[key])
: data[key];
form.appendChild(input);
}
}
form.style.display = 'none';
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
};
Пример:
io.open('POST', 'fileServer.jsp', {request: {key:"42", cols:[2, 3, 34]}});
Чтобы открыть в новом окне, установите параметр target
:
io.open('POST', someURL, someArgs, 'newwin');
или чтобы каждый раз открывать новое окно / вкладку:
io.open('POST', someURL, someArgs, '_blank');
Самый простой ответ - использовать разделитель строк и столбцов, чтобы преобразовать ваш словарь в одну строку. Тогда вам просто нужно сохранить 1 строку в файле настроек.
Рассматривали ли вы возможность использования XML для хранения словаря? Это обеспечит определенную степень расширяемости, если в будущем вы решите, что хотите иметь возможность хранить другие типы словарей. Вы можете сделать что-то вроде:
<dictionary>
<entry key="myKey">
[whatever data you like]
</entry>
</dictionary>
Возможно, будет лишним, но вы также должны быть готовы к тому, что вам понадобится хранить более сложные данные, такие как пользовательские объекты.
Помимо выполнения чего-то вроде , предложенного Дэвидом , я бы поискал альтернативное хранилище для Словаря. В конечном итоге объект настроек сериализуется на диск.
Вы можете создать собственный класс, который представляет словарь как общедоступное свойство. Затем вы можете указать этот настраиваемый тип в качестве типа для своей настройки.
Изменить:
Я только что прочитал, что по какой-то причине универсальный словарь не может быть сериализован в формате XML, поэтому мое решение, вероятно, не сработает (я хотя не тестировал ...). Это странно, потому что общий список может быть сериализован без каких-либо проблем.
Вы все равно можете создать собственный класс, который может быть установлен как пользовательская настройка, но вам нужно будет иметь список, открытый как свойство, а не словарь.
Вы также можете использовать System.Collections.Specialized.StringCollection, поместив ключ в четный индекс, а значения в нечетный.
/// <summary>
/// Emulate a Dictionary (Serialization pb)
/// </summary>
private static string getValue(System.Collections.Specialized.StringCollection list, string key)
{
for (int i = 0; i * 2 < list.Count; i++)
{
if (list[i] == key)
{
return list[i + 1];
}
}
return null;
}
/// <summary>
/// Emulate a Dictionary (Serialization pb)
/// </summary>
private static void setValue(System.Collections.Specialized.StringCollection list, string key, string value)
{
for (int i = 0; i * 2 < list.Count; i++)
{
if (list[i] == key)
{
list[i + 1] = value;
return;
}
}
list.Add(key);
list.Add(value);
}