JavaScriptSserializer (). Serialize (Objeto da estrutura da entidade)
-
20-09-2019 - |
Pergunta
Pode ser, não é tão problemático para você. Mas estou tentando pela primeira vez com a serialização da JSON. e também leia outros artigos no StackowerFlow.
Eu criei o modelo de dados da estrutura da entidade. Então, por método, obtenha todos os dados do objeto:
private uqsEntities _db = new uqsEntities();
//get all data from table sysMainTableColumns where tableName=paramtableName
public List<sysMainTableColumns> getDataAboutMainTable(string tableName)
{
return (from column in _db.sysMainTableColumns
where column.TableName==tableName
select column).ToList();
}
meu serviço da web:
public string getDataAboutMainTable()
{
penta.DAC.Tables dictTable = new penta.DAC.Tables();
var result = dictTable.getDataAboutMainTable("1");
return new JavaScriptSerializer().Serialize(result);
}
e método jQuery Ajax
$('#loadData').click(function() {
$.ajax({
type: "POST",
url: "WS/ConstructorWS.asmx/getDataAboutMainTable",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$("#jsonResponse").html(msg);
var data = eval("(" + msg + ")");
//do something with data
},
error: function(msg) {
}
});
});
Falha (de Fairbug):
missing ] after element list [Break on this error] var data = eval("(" + msg + ")");
Ajax Resposta (por Firebug se eu remover var data = eval("(" + msg + ")")
):
{"d":"[{\"ID\":1,\"TableName\":\"1\",\"Name\":\"d\",\"FullName\":\"f\",\"Type\":\"nvarchar(50)\",\"MeasurementUnit\":\"t \",\"EntityState\":2,\"EntityKey\":{\"EntitySetName\":\"sysMainTableColumns\",\"EntityContainerName\":\"uqsEntities\",\"EntityKeyValues\":[{\"Key\":\"ID\",\"Value\":1}],\"IsTemporary\":false}},{\"ID\":2,\"TableName\":\"1\",\"Name\":\"e\",\"FullName\":\"e\",\"Type\":\"int\",\"MeasurementUnit\":\"r \",\"EntityState\":2,\"EntityKey\":{\"EntitySetName\":\"sysMainTableColumns\",\"EntityContainerName\":\"uqsEntities\",\"EntityKeyValues\":[{\"Key\":\"ID\",\"Value\":2}],\"IsTemporary\":false}}]"}
Problema com dados, o código falha lá. E eu acho que não uso JavaScriptSserializer (). Serialize () Método muito bem.
Por favor, diga -me, que grande erro eu cometi no código C#?
Solução
- Você não precisa
eval
. jQuery faz isso por você quando você especificardataType: "json"
- É uma má ideia serializar entidades diretamente como
JavaScriptSerializer
morrerá se alguém conter uma referência circular. - Não se esqueça do
d
! Isso é inserido pelos serviços do WCF para trabalhar em torno de um buraco de segurança em alguns navegadores quando o objeto raiz é uma matriz.
Outras dicas
Você já tentou depurar com o Firebug ou o Fiddler para ver como é o conteúdo da JSON?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow