1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Runtime.Serialization.Json;
6: using System.IO;
7: using System.Runtime.Serialization;
8:
9: namespace JsonDemo
10: {
11: class Program
12: {
13: static void Main(string[] args)
14: {
15: Book b = new Book { BookName = "三国演义", Author = "罗贯中", Category = "四大名著", Page = 1000 };
16: Book b1 = new Book { BookName = "水浒传", Author = "施耐庵", Category = "四大名著", Page = 1000 };
17: b.SameCategory.Add(b1);
18: string json = b.ToJsonString();
19: Console.WriteLine(json);
20: Book b2 = Book.CreateObjectByJson<Book>(json);
21: Console.ReadLine();
22: }
23: }
24:
25: [DataContract(Namespace = "JsonDemo")]
26: class BaseClass
27: {
28: public virtual string ToJsonString()
29: {
30: DataContractJsonSerializer ser = new DataContractJsonSerializer(this.GetType());
31: using (Stream stream = new MemoryStream())
32: {
33: ser.WriteObject(stream, this);
34: byte[] buffer = new byte[stream.Length];
35: stream.Position = 0;
36: stream.Read(buffer, 0, buffer.Length);
37: string json = Encoding.UTF8.GetString(buffer);
38: return json;
39: }
40: }
41:
42: public static T CreateObjectByJson<T>(string json) where T : BaseClass
43: {
44: DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
45: using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
46: {
47: T obj = ser.ReadObject(stream) as T;
48: return obj;
49: }
50: }
51: }
52: //
53: [DataContract(Namespace = "JsonDemo.Book")]
54: class Book : BaseClass
55: {
56: [DataMember(Order = 0)]
57: public string BookName { get; set; }
58:
59: [DataMember(Order = 1)]
60: public int Page { get; set; }
61:
62: [DataMember(Order = 2)]
63: public string Category { get; set; }
64:
65: [DataMember(Order = 3)]
66: public string Author { get; set; }
67:
68: List<Book> _sameCategory;
69:
70: [DataMember(Order = 4)]
71: public List<Book> SameCategory
72: {
73: get
74: {
75: if (_sameCategory == null)
76: {
77: _sameCategory = new List<Book>();
78: }
79: return _sameCategory;
80: }
81: }
82: }
83:
84: }