private void WriteAttribute(Member member)
{
AttributeAccessor attribute = member.Mapping.Attribute;
if (attribute.Mapping is SpecialMapping)
{
SpecialMapping special = (SpecialMapping)attribute.Mapping;
if (special.TypeDesc.Kind == TypeKind.Attribute)
{
WriteSourceBegin(member.ArraySource);
Writer.Write("attr");
WriteSourceEnd(member.ArraySource);
Writer.WriteLine(";");
}
else if (special.TypeDesc.CanBeAttributeValue)
{
Writer.Write("if (attr is ");
Writer.Write(typeof(XmlAttribute).FullName);
Writer.WriteLine(") {");
Writer.Indent++;
WriteSourceBegin(member.ArraySource);
Writer.Write("(");
Writer.Write(typeof(XmlAttribute).FullName);
Writer.Write(")attr");
WriteSourceEnd(member.ArraySource);
Writer.WriteLine(";");
Writer.Indent--;
Writer.WriteLine("}");
}
else
throw new InvalidOperationException(SR.XmlInternalError);
}
else
{
if (attribute.IsList)
{
Writer.WriteLine("string listValues = Reader.Value;");
Writer.WriteLine("string[] vals = listValues.Split(null);");
Writer.WriteLine("for (int i = 0; i < vals.Length; i++) {");
Writer.Indent++;
string attributeSource = GetArraySource(member.Mapping.TypeDesc, member.ArrayName);
WriteSourceBegin(attributeSource);
WritePrimitive(attribute.Mapping, "vals[i]");
WriteSourceEnd(attributeSource);
Writer.WriteLine(";");
Writer.Indent--;
Writer.WriteLine("}");
}
else
{
WriteSourceBegin(member.ArraySource);
WritePrimitive(attribute.Mapping, attribute.IsList ? "vals[i]" : "Reader.Value");
WriteSourceEnd(member.ArraySource);
Writer.WriteLine(";");
}
}
if (member.Mapping.CheckSpecified == SpecifiedAccessor.ReadWrite && member.CheckSpecifiedSource != null && member.CheckSpecifiedSource.Length > 0)
{
Writer.Write(member.CheckSpecifiedSource);
Writer.WriteLine(" = true;");
}
if (member.ParamsReadSource != null)
{
Writer.Write(member.ParamsReadSource);
Writer.WriteLine(" = true;");
}
}