J'utilise le sérialiseur json.net de newton. En désérialisant le json à 'The Fox'; il entre dans le ctor protégé et obtient les valeurs de propriété par défaut. Mais pas les valeurs de propriété dans la chaîne json. Puis-je résoudre ce problème sans utiliser dto ou tout autre framework de mappeur?Désérialisation Objet construit protégé de json
class TheFox
{
string _Id;
string _Name;
protected TheFox()
{
_Id = "Default Id";
_Name = "Default Name";
}
public TheFox(string id, string name) : this()
{
_Name = name;
_Id = id;
}
public string Id
{
get { return _Id; }
}
public string Name
{
get { return _Name; }
}
}
C'est le test:
var fox = new TheFox("FoxId", "FoxTail");
var json = JsonConvert.SerializeObject(fox);
Console.WriteLine(json);
var settings = new JsonSerializerSettings()
{
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};
var returned = JsonConvert.DeserializeObject<TheFox> (json, settings);
Assert.IsTrue (returned.Id != "Default Id");
Assert.IsTrue (returned.Name != "Default Name");
Il est étrange que tant de désérialiseurs ne prennent pas en charge les constructeurs paramétrés. – CodesInChaos