4
我有一個簡單的類層次結構。 Foo是基類。 Bar和Baz是從Foo繼承而來的。這些類的實例存儲在List中。我必須將列表序列化爲JSON。它工作得很好。但問題是將其反序列化回列表<>。如何用Json.NET重建我的類層次結構?
我把Foos,Bars和Bazs放入列表中,序列化它,當我反序列化它時,我只得到Foos :)但我想要我的酒吧和Bazs。用Json.NET可以嗎?
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace JsonTest
{
class Foo
{
int number;
public Foo(int number)
{
this.number = number;
}
public int Number
{
get { return number; }
set { number = value; }
}
}
class Bar : Foo
{
string name;
public Bar(int number, string name)
: base(number)
{
this.name = name;
}
public string Name
{
get { return name; }
set { name = value; }
}
}
class Baz : Foo
{
float time;
public Baz(int number, float time)
: base(number)
{
this.time = time;
}
public float Time
{
get { return time; }
set { time = value; }
}
}
class Program
{
static void Main(string[] args)
{
List<Foo> fooList = new List<Foo>();
fooList.Add(new Foo(123));
fooList.Add(new Bar(123, "Hello, world"));
fooList.Add(new Baz(123, 0.123f));
string json = JsonConvert.SerializeObject(fooList, Formatting.Indented);
List<Foo> fooList2 = JsonConvert.DeserializeObject<List<Foo>>(json);
// Now I have only Foos in the List
}
}
}
嗯...... Bar和Baz的所有字段都被序列化爲JSON。在調用JsonConvert.SerializeObject之後,JSON中有Bar的名稱字段和Baz的時間字段。只有反過來才行。反序列化JSON給了我三個Foos。它只是忽略了巴爾和巴茲特有的領域。 我認爲可能有一個聰明的技巧(如屬性)與Json.NET保持我的類層次結構。 – 2010-08-19 07:00:18