Eu tenho um modelo de objeto que se parece com isso:
public MyObjectInJson
{
public long ObjectID {get;set;}
public string ObjectInJson {get;set;}
}
A propriedade ObjectInJson
é uma versão já serializada, um objeto que contém listas aninhadas. Por enquanto, estou serializando a lista MyObjectInJson
manualmente desta forma:
StringBuilder TheListBuilder = new StringBuilder();
TheListBuilder.Append("[");
int TheCounter = 0;
foreach (MyObjectInJson TheObject in TheList)
{
TheCounter++;
TheListBuilder.Append(TheObject.ObjectInJson);
if (TheCounter != TheList.Count())
{
TheListBuilder.Append(",");
}
}
TheListBuilder.Append("]");
return TheListBuilder.ToString();
Gostaria de saber se posso substituir esse tipo de código perigoso JavascriptSerializer
e obter os mesmos resultados. Como eu faria isso?
Obrigado.
System.Web.Extensions
ser usadaSystem.Web.Script.Serialization
: stackoverflow.com/a/18746092/1599699 stackoverflow.com/a/19299695/1599699Respostas:
Se estiver usando o .Net Core 3.0 ou posterior;
O padrão é usar a
System.Text.Json
implementação do analisador interno.por exemplo
como alternativa, outras opções menos populares estão disponíveis, como o analisador Utf8Json e Jil : elas podem oferecer desempenho superior , se você realmente precisar, mas precisará instalar os respectivos pacotes.
Se preso usando o .Net Core 2.2 ou anterior;
O padrão é usar o Newtonsoft JSON.Net como sua primeira escolha do Analisador JSON.
por exemplo
pode ser necessário instalar o pacote primeiro.
Para obter mais detalhes, consulte e vote com antecedência a resposta que é a fonte dessas informações .
Apenas para referência, esta foi a resposta original, há muitos anos;
fonte
Você também pode usar o Json.NET. Basta fazer o download em http://james.newtonking.com/pages/json-net.aspx , extrair o arquivo compactado e adicioná-lo como referência.
Em seguida, basta serializar a lista (ou qualquer objeto que você desejar) com o seguinte:
Atualização: você também pode adicioná-lo ao seu projeto pelo Gerenciador de Pacotes NuGet (Ferramentas -> Gerenciador de Pacotes NuGet -> Console do Gerenciador de Pacotes):
Documentação: serializando coleções
fonte
Há duas maneiras comuns de fazer isso com os serializadores JSON internos:
JavaScriptSerializer
DataContractJsonSerializer
Observe que essa opção requer a definição de um contrato de dados para sua classe:
fonte
fonte
O .NET já suporta serialização Json básica por meio do espaço para nome System.Runtime.Serialization.Json e a classe DataContractJsonSerializer desde a versão 3.5. Como o nome indica, o DataContractJsonSerializer leva em consideração as anotações de dados adicionadas aos seus objetos para criar a saída Json final.
Isso pode ser útil se você já tiver classes de dados anotadas que deseja serializar o Json em um fluxo, conforme descrito em Como: Serializar e Deserializar Dados JSON . Existem limitações, mas é suficientemente bom e rápido o suficiente se você tiver necessidades básicas e não quiser adicionar ainda outra biblioteca ao seu projeto.
O código a seguir serializa uma lista para o fluxo de saída do console. Como você vê, é um pouco mais detalhado que o Json.NET e não é seguro para tipos (ou seja, sem genéricos)
Por outro lado, o Json.NET fornece um controle muito melhor sobre como você gera o Json. Isso será muito útil quando você precisar mapear nomes de nomes compatíveis com javascript para classes .NET, datas de formato para json etc.
Outra opção é o ServiceStack.Text , parte da pilha ServicStack ..., que fornece um conjunto de serializadores muito rápidos para Json, JSV e CSV.
fonte
baseando-me em uma resposta de outra postagem. Eu criei uma maneira mais genérica de criar uma lista, utilizando recuperação dinâmica com o Json.NET versão 12.x
chamada para processar
ou esta chamada para processar
fonte