public override System.CodeDom.CodeMemberMethod GetDeserializerMethod() { CodeMemberMethod method = base.GetDeserializerMethod(); CodeTypeReference listType = CodeGen.CreateGenericType(typeof(List <>), BaseEntry.GetTypeReference()); method.Statements.Add(CodeGen.MakeVariable(listType, "ret", CodeGen.CreateObject(listType))); method.Statements.Add(CodeGen.MakeVariable(typeof(int), "i", CodeGen.GetPrimitive(0))); List <CodeStatement> loopStatements = new List <CodeStatement>(); loopStatements.Add(CodeGen.MakeVariable(BaseEntry.GetTypeReference(), "o", _memberEntry.GetReaderExpression(CodeGen.GetReader()))); loopStatements.Add(CodeGen.GetStatement(CodeGen.CallMethod(CodeGen.GetVariable("ret"), "Add", CodeGen.GetVariable("o")))); if (TermExpression.IsValid) { CodeStatement[] ret = new CodeStatement[] { CodeGen.GetReturn(CodeGen.CallMethod(CodeGen.GetVariable("ret"), "ToArray")) }; loopStatements.Add(CodeGen.GetIf(CodeGen.GetCheck(TermExpression, CodeGen.GetVariable("o"), CodeGen.GetVariable("i")), ret)); loopStatements.Add(CodeGen.GetIncrement(CodeGen.GetVariable("i"), 1)); } if (!_required) { method.Statements.Add( CodeGen.GetTryCatch(new CodeStatement[] { CodeGen.GetInfLoop(loopStatements.ToArray()) }, typeof(EndOfStreamException))); method.Statements.Add(CodeGen.GetReturn(CodeGen.CallMethod(CodeGen.GetVariable("ret"), "ToArray"))); } else { method.Statements.Add(CodeGen.GetInfLoop(loopStatements.ToArray())); } return(method); }