. Что касается Oracle 11g, теперь вы можете использовать оператор PIVOT
для достижения этого результата:
create table tq84_pivot (
month number,
value number
);
insert into tq84_pivot values(1, 100);
insert into tq84_pivot values(2, 200);
insert into tq84_pivot values(3, 300);
insert into tq84_pivot values(4, 400);
insert into tq84_pivot values(5, 500);
insert into tq84_pivot values(6, 600);
--
insert into tq84_pivot values(1, 400);
insert into tq84_pivot values(2, 350);
insert into tq84_pivot values(4, 150);
select
*
from
tq84_pivot
pivot (
sum (value) as sum_value for
(month) in (1 as month_jan,
2 as month_feb,
3 as month_mar,
4 as month_apr,
5 as month_mai,
6 as month_jun,
7 as month_jul,
8 as month_aug,
9 as month_sep,
10 as month_oct,
11 as month_nov,
12 as month_dec)
);
Json.NET делает это ...
string json = @"{""key1"":""value1"",""key2"":""value2""}";
var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
Еще примеры: Сериализация коллекций с помощью Json.NET
, который Это может теперь быть сделано с помощью System.Text.Json
, который встроен к .net core 3.0
. Теперь возможно десериализовать JSON без пользующиеся сторонние библиотеки.
var json = @"{""key1"":""value1"",""key2"":""value2""}";
var values = JsonSerializer.Deserialize<Dictionary<string, string>>(json);
Также доступный в ню - получают пакет Система. Текст. Json при использовании.Net Standard или.Net Framework.
Изменить: Это работает, но принятый ответ с использованием Json.NET намного сложнее просто. Оставьте это на случай, если кому-то понадобится код только для BCL.
Он не поддерживается платформой .NET из коробки. Вопиющий недосмотр - не всем нужно десериализовать объекты с именованными свойствами. Так что я закончил свой собственный:
<Serializable()> Public Class StringStringDictionary
Implements ISerializable
Public dict As System.Collections.Generic.Dictionary(Of String, String)
Public Sub New()
dict = New System.Collections.Generic.Dictionary(Of String, String)
End Sub
Protected Sub New(info As SerializationInfo, _
context As StreamingContext)
dict = New System.Collections.Generic.Dictionary(Of String, String)
For Each entry As SerializationEntry In info
dict.Add(entry.Name, DirectCast(entry.Value, String))
Next
End Sub
Public Sub GetObjectData(info As SerializationInfo, context As StreamingContext) Implements ISerializable.GetObjectData
For Each key As String in dict.Keys
info.AddValue(key, dict.Item(key))
Next
End Sub
End Class
Вызывается:
string MyJsonString = "{ \"key1\": \"value1\", \"key2\": \"value2\"}";
System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs = new
System.Runtime.Serialization.Json.DataContractJsonSerializer(
typeof(StringStringDictionary));
System.IO.MemoryStream ms = new
System.IO.MemoryStream(Encoding.UTF8.GetBytes(MyJsonString));
StringStringDictionary myfields = (StringStringDictionary)dcjs.ReadObject(ms);
Response.Write("Value of key2: " + myfields.dict["key2"]);
Извините за смесь C # и VB.NET…
Я обнаружил, что .NET имеет встроенный способ преобразования строки JSON в Dictionary
через Тип System.Web.Script.Serialization.JavaScriptSerializer
в сборке 3.5 System.Web.Extensions
. Используйте метод DeserializeObject (String)
.
Я наткнулся на это, когда делал ajax-сообщение (через jquery) с типом содержимого 'application / json' для статического метода страницы .net и увидел, что этот метод (который имел единственный параметр типа Object
) волшебным образом получил этот Словарь.