我的代码非常简单但无法正常运行:
var binder = new TypeNameSerializationBinder("MyNamespace.{0}, MyAssembly");
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All,
Binder = binder
};
string json = ...
JsonSerializer js = JsonSerializer.Create(settings);
// binder not called
var obj1 = js.Deserialize(new StringReader(json), bindingContext.ModelType);
// binder not called either
var obj = JsonConvert.DeserializeObject(json, bindingContext.ModelType, settings);
// not called even when serializing
JsonConvert.SerializeObject(obj, bindingContext.ModelType, settings);
TypeNameSerializationBinder 是我从here复制的简单活页夹。
没有调用binder的方法。 $ type属性被忽略。所有项目都被反序列化为父类实例。我试图反序化的类型是Dictionary<String, MyParentClass>
。
答案 0 :(得分:1)
在JSON字符串中,“$ type”属性应该是对象的第一个属性。这似乎是一个问题。