Eu quero converter minha Dictionary<int,List<int>>
string JSON. Alguém sabe como conseguir isso em c #?
c#
json
dictionary
daehaai
fonte
fonte
Respostas:
Serializar estruturas de dados contendo apenas valores numéricos ou booleanos é bastante simples. Se você não tiver muito o que serializar, poderá escrever um método para seu tipo específico.
Para a
Dictionary<int, List<int>>
como você especificou, você pode usar o Linq:Mas, se você estiver serializando várias classes diferentes, ou estruturas de dados mais complexas, ou especialmente se seus dados contiverem valores de sequência , seria melhor usar uma biblioteca JSON respeitável que já saiba lidar com coisas como caracteres de escape e quebras de linha. Json.NET é uma opção popular.
fonte
Esta resposta menciona o Json.NET, mas deixa de lhe dizer como você pode usar o Json.NET para serializar um dicionário:
Ao contrário do JavaScriptSerializer,
myDictionary
não precisa ser um dicionário do tipo<string, string>
para o JsonConvert funcionar.fonte
O Json.NET provavelmente serializa dicionários de C # adequadamente agora, mas quando o OP postou originalmente essa pergunta, muitos desenvolvedores do MVC podem estar usando a classe JavaScriptSerializer porque essa era a opção padrão pronta para uso.
Se você estiver trabalhando em um projeto legado (MVC 1 ou MVC 2) e não puder usar o Json.NET, recomendo usar um em
List<KeyValuePair<K,V>>
vez de aDictionary<K,V>>
. A classe herdada JavaScriptSerializer serializará esse tipo muito bem, mas terá problemas com um dicionário.Documentation: Serializando coleções com o Json.NET
fonte
Isso gravará no console:
fonte
Resposta simples de uma linha
(
using System.Web.Script.Serialization
)Este código irá converter qualquer
Dictionary<Key,Value>
paraDictionary<string,string>
e, em seguida, serializá-lo como uma string JSON:Vale a pena notar que algo assim
Dictionary<int, MyClass>
também pode ser serializado dessa maneira, preservando o tipo / objeto complexo.Explicação (discriminação)
Você pode substituir a variável
yourDictionary
pela sua variável real.Fazemos isso, porque a chave e o valor precisam ser do tipo string, como requisito para serialização de a
Dictionary
.fonte
System.Web.Extensions
não está na versão Client Framework, mas requer a versão completa também.Desculpe se a sintaxe está um pouquinho menor, mas o código do qual estou obtendo estava originalmente no VB :)
fonte
No uso do Asp.net Core:
fonte
System.Core
e tentei referenciarusing Newtonsoft.Json
e sem alegria. Eu acho queNewtonsoft
é uma biblioteca de terceiros.Você pode usar
System.Web.Script.Serialization.JavaScriptSerializer
:fonte
Veja como fazê-lo usando apenas bibliotecas .Net padrão da Microsoft…
fonte
Dictionary<string, dynamic>
e ter todos os tipos primitivos JSON, como intergers, floats, booleanos, strings e até nulos e dentro de um objeto. +1Você poderia usar JavaScriptSerializer .
fonte
string
. Postei aqui uma resposta que inclui isso, se você quiser dar uma olhada.Parece muitas bibliotecas diferentes e o que parece não ter surgido nos anos anteriores. No entanto, em abril de 2016, essa solução funcionou bem para mim. Strings facilmente substituídos por ints .
TL / DR; Copie isso se é para isso que você veio aqui:
Dois pontos de importação. Primeiro, certifique-se de adicionar System.Runtime.Serliazation como referência no seu projeto no Solution Explorer do Visual Studio. Segundo, adicione esta linha,
na parte superior do arquivo, com o restante de seus usos, para que a
DataContractJsonSerializer
classe seja encontrada. Esta postagem do blog tem mais informações sobre esse método de serialização.Formato de Dados (Entrada / Saída)
Meus dados são um dicionário com três strings, cada um apontando para uma lista de strings. As listas de cadeias têm comprimentos 3, 4 e 1. Os dados são assim:
A saída gravada no arquivo estará em uma linha, aqui está a saída formatada:
fonte
Isso é semelhante ao que Meritt postou anteriormente. apenas postando o código completo
fonte
Se o seu contexto permitir (restrições técnicas, etc.), use o
JsonConvert.SerializeObject
método da Newtonsoft.Json : facilitará sua vida.fonte