我想知道是否有一个对象包含一个字段,该字段的反序列化过程依赖于另一个字段,如何反序列化父对象?
集装箱
class Container
{
public int Id { get; set; }
public object Data { get; set; }
}
等级制度
class FieldType1
{
public string Value { get; set; }
}
class FieldType2
{
public int Numbers { get; set; }
}
如果我有一个
Dictionary<int,Type>
如何反序列化像下面这样的字符串形式的对象?:
var container = new Container { Data = new FieldType1 { Value = "sata" }};
var str = JsonConvert.SerializeObject(container);
var clone = JsonConvert.DeserializeObject<Container>(str);
正如你在我上面的例子中看到的,我总是有相同的
container
类型。但有一个属性不同。
更新
在这里回答了一些问题之后,是否可以只保留一种父对象类型,而为第二个字段保留一种基类型?
[JsonSubTypes.KnownSubType(typeof(Child1),1)]
[JsonSubTypes.KnownSubType(typeof(Child2),2)]
public abstract Child
{
}
public class Parent{
public int Id;
public Child child;
}
我能修饰一下父字段以知道如何反序列化它的第二个字段吗(类似于
JsonSubTypes
)?
总结一下我不想
P,P1,P2..Pn
父级的类型。
我想要一种
P
对于具有
F1,F2...Fn
它的第二个字段的类型。所以当我反序列化时
JsonConvert.DeserializeObject<P>
当转换器负责哪个混凝土类型是第二个字段时:
Parent c1=new P{ id=1,child=new Child1()};
Parent c2=new P{ id=2,child=newChild2()};
List<Parent> items=new List<Parent>{c1,c2};
var str=JsonConvert.SerializeObject(items);
var clone=JsonConvert.DeserializeObject<List<Parent>>(str);