serialization - 将数据序列化为 JSON

  显示原文与译文双语对照的内容
137 0

希望把这个解决方案作为通用解决方案,而不是Person对象,GetJSON方法应该接受具有DataContract属性的泛型类型。 谁能解释一下怎么做。

下面是基本代码


namespace TestDataContractJsonSerializer
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.IO;
using System.Runtime.Serialization.Json;

 public class Program
 {
 public static void Main(string[] args)
 {

 List<Person> persons = new List<Person> { new Person("Person1"), new Person("Person2") };

 var strJSON = from p in persons select GetJSON(p);
 Console.WriteLine("In JSON Format:");

 foreach (string str in strJSON)
 {
 Console.WriteLine(" {0}", str); 
 }
 Console.ReadKey();
 }

 private static string GetJSON(Person p)
 {
 if (p!= null)
 {
 MemoryStream stream = new MemoryStream();
 DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(Person));
 dataContractJsonSerializer.WriteObject(stream, p);
 stream.Position = 0;
 StreamReader sr = new StreamReader(stream);
 return sr.ReadToEnd();
 }

 return string.Empty;


 }
 }

 [DataContract]
 public class Person
 {

 public Person(string name)
 {
 this.Name = name;
 }
 [DataMember]
 public string Name { get; private set; }
 }
}

时间: 原作者:

97 5

在基本的情况下它看起来像这样。 你可能需要添加一些特殊的大小写和/或者错误处理,例如如果类型T 不可序列化。


 private static string GetJSON<T>(T objToSerialize)
 {
 if (objToSerialize!= null)
 {
 MemoryStream stream = new MemoryStream();
 DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(objToSerialize.GetType());
 dataContractJsonSerializer.WriteObject(stream, objToSerialize);
 stream.Position = 0;
 StreamReader sr = new StreamReader(stream);
 return sr.ReadToEnd();
 }

 return string.Empty;


 }

...