void AddProperty (CodeTypeDeclaration td, XmlSchemaElement xe)
{
var att = GenerateInternal ? MemberAttributes.Assembly : MemberAttributes.Public;
var fi = new CodeMemberField () { Name = CodeIdentifier.MakeValid (xe.QualifiedName.Name + "Field"), Type = GetCodeTypeReference (xe.ElementSchemaType.QualifiedName, xe) };
td.Members.Add (fi);
var pi = new CodeMemberProperty () { Name = xe.QualifiedName.Name, Attributes = att, HasGet = true, HasSet = true, Type = fi.Type };
// [DataMember(Name=foobar, IsRequired=!nillable)]
var dma = new CodeAttributeDeclaration (
new CodeTypeReference (typeof (DataMemberAttribute)));
if (fi.Name != xe.QualifiedName.Name)
new CodeAttributeArgument ("Name", new CodePrimitiveExpression (xe.QualifiedName.Name));
if (!xe.IsNillable)
new CodeAttributeArgument ("IsRequired", new CodePrimitiveExpression (true));
pi.CustomAttributes.Add (dma);
pi.GetStatements.Add (new CodeMethodReturnStatement () { Expression = new CodeFieldReferenceExpression (this_expr, fi.Name) });
pi.SetStatements.Add (new CodeAssignStatement (new CodeFieldReferenceExpression (this_expr, fi.Name), arg_value_expr));
td.Members.Add (pi);
}