public ActionBase Deserialize(XElement xAction) { ActionBase action; if (xAction.Name.LocalName != "Unknown") { var actionCode = XActionNames.FromNodeName(xAction.Name.LocalName); action = _factory.Create(actionCode); } else { action = new ActionUnknown((ActionCode)xAction.RequiredByteAttribute("type")); } action.AcceptVisitor(this, xAction); return(action); }