Ну, во-первых, для первого примера у вас есть список коллекций KeyValuePair<string,string>
объектов.
Итак, причина, по которой он преобразуется в показанный JSON, заключается в следующем:
{
"name":"package_name",
"type":
[ // List<Dictionary<string,string>>
[ // Dictionary<string,string>, a list of KeyValuePair<string,string> objects
{ // KeyValuePair<string,string> object
"Key":"http:\/\/random.url.as.key",
"Value":"random\/value"
}
]
]
}
Что касается вашего второго примера, вы создаете динамический объект, содержащий динамический объект, и каждое из полей объекта является тем, что обеспечивает значение ключа.
Итак, я бы предложил обрезать внешний List<>
вокруг Dictionary<string,string>
, а затем использовать объект Newtonsoft.Json.Converters.KeyValuePairConverter
в библиотеке JSON.Net при выполнении сериализации:
string json = JsonConvert.SerializeObject( package, new KeyValuePairConverter( ) );
Надеюсь, это поможет.
EDIT
Ладно, я решил привести более конкретный пример
public class Package
{
public Package()
{
name = "";
type = new Dictionary<string, string>();
}
public string name { get; set; }
public Dictionary<string, string> type { get; set; }
}
Package package = new Package();
package.name = "package_name";
package.type.Add("http://random.url.as.key", "random/value");
string json = JsonConvert.SerializeObject( package, new KeyValuePairConverter( ) );
Это даст вам вывод
{
"name":"package_name",
"type":
{
"http://random.url.as.key":"random/value"
}
}