我有一个简单的类层次结构。 Foo是基类。 Bar和Baz继承自Foo。这些类的实例存储在List中。我必须将列表序列化为JSON。它工作得很好。但问题是将其反序列化为List<>。
我把Foos,Bars和Bazs放在列表中,序列化它,当我反序列化它时我只得到了Foos :)我想要我的Bars和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
}
}
}
答案 0 :(得分:0)
您正在序列化Foos列表,而不是Baz和Bars列表
我认为保持逻辑的最简单的解决方案是序列化Baz和Bars列表并将列表连接起来(这只有在你可以使用不同的顺序时才有效)。
通常,使用此设计看起来并不自然。最好让一个类具有不同的构造函数,并在该字段不适用时使用null。