public IEnumerable<IMessagePart> Deserialize(XContainer partsContainer) { partsContainer.ThrowIfNull("partsContainer"); foreach (XElement partElement in partsContainer.Elements()) { switch (partElement.Name.LocalName) { case "color": yield return MessageColorSerializer.Instance.Deserialize(partElement); break; case "lineBreak": yield return MessageLineBreakSerializer.Instance.Deserialize(partElement); break; case "question": yield return MessageQuestionSerializer.Instance.Deserialize(partElement); break; case "text": yield return MessageTextSerializer.Instance.Deserialize(partElement); break; } } }