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); }
ActionBase IActionVisitor <XElement, ActionBase> .Visit(ActionUnknown action, XElement xAction) { action.Data = XBinary.FromXml(xAction.Element("data")); return(action); }
XElement IActionVisitor <XElement, XElement> .Visit(ActionUnknown action, XElement arg) { return(new XElement("Unknown", new XAttribute("type", (byte)action.ActionCode), XBinary.ToXml(action.Data))); }