如何在c#中显示JSON数据

本文关键字:显示 JSON 数据 | 更新日期: 2023-09-27 18:01:58

我是WCF新手。我创建了一个WCF服务,并将数据作为JSON数据返回。我将返回数据赋值给GridView,它完美地显示了数据。

[OperationContract]
[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate="employee/{search}")] 
List<Employee> Listing(string search);

现在,我想在

中显示JSON字符串元素(以验证数据)。我试图显示返回的数据,
dvJson.InnerHtml = esc.Listing("s");

显示如下

Employee[]

如何使用c#在div元素中显示JSON字符串?

如何在c#中显示JSON数据

我找到解决办法了…

  JavaScriptSerializer serializer = new JavaScriptSerializer();
  StringBuilder sb = new StringBuilder();
  serializer.Serialize(esc.Listing("s"), sb);
  dvJson.InnerHtml = sb.ToString();
输出:

  [{"ID":1,"Name":"Raja"},{"ID":2,"Name":"Manisha"},{"ID":4,"Name":"Sam"},{"ID":7,"Name":"Suresh"}]
使用DataContractJsonSerializer

(Pranav Singh代码更新[2-4行])

为避免Type信息,从JSON数据中设置JSON Serializer setting EmitTypeInformation to "Never"

  MemoryStream stream1 = new MemoryStream();
  DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
  settings.EmitTypeInformation = System.Runtime.Serialization.EmitTypeInformation.Never;
  DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<Employee>), settings);
  ser.WriteObject(stream1, esc.Listing("s"));
  stream1.Position = 0;
  StreamReader sr = new StreamReader(stream1);
  dvJson.InnerHtml = sr.ReadToEnd();

谢谢

使用DataContractJsonSerializer类,参考DataContractJsonSerializer类

它比JavaScriptSerializer更好,因为它可以安全地从JSON字符串反序列化对象,它是WCF的一部分。

用法:

    MemoryStream stream1 = new MemoryStream();
    DataContractJsonSerializer ser = new DataContractJsonSerializer (typeof (List<Employee>));
    ser.WriteObject(stream1, esc.Listing("s"));
    stream1.Position = 0;
    StreamReader sr = new StreamReader(stream1);
    dvJson.InnerHtml = sr.ReadToEnd();

避免Type信息(用下面的代码替换第二行)

JSON序列化器设置:设置 EmitTypeInformation to "Never" 以避免JSON数据中的"__Type"信息。

    DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
    settings.EmitTypeInformation = System.Runtime.Serialization.EmitTypeInformation.Never;
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<Employee>), settings);