* XmlTypeMapMember.cs: Added GlobalIndex property.
* XmlTypeMapping.cs: When adding a member, initialize its GlobalIndex
property.
* SerializationCodeGenerator.cs:
* XmlSerializationWriterInterpreter.cs:
* XmlSerializationReaderInterpreter.cs: Use GlobalIndex instead of
Index to get/set the values from the input array, since some Index
values are shared between attribute and element members. Fixes
bug #78562.
svn path=/trunk/mcs/; revision=61531
+2006-06-07 Lluis Sanchez Gual <lluis@novell.com>
+
+ * XmlTypeMapMember.cs: Added GlobalIndex property.
+ * XmlTypeMapping.cs: When adding a member, initialize its GlobalIndex
+ property.
+ * SerializationCodeGenerator.cs:
+ * XmlSerializationWriterInterpreter.cs:
+ * XmlSerializationReaderInterpreter.cs: Use GlobalIndex instead of
+ Index to get/set the values from the input array, since some Index
+ values are shared between attribute and element members. Fixes
+ bug #78562.
+
2006-05-30 Atsushi Enomoto <atsushi@ximian.com>
* SerializationCodeGenerator.cs,
string GenerateGetMemberValue (XmlTypeMapMember member, string ob, bool isValueList)
{
- if (isValueList) return GetCast (member.TypeData, TypeTranslator.GetTypeData (typeof(object)), ob + "[" + member.Index + "]");
+ if (isValueList) return GetCast (member.TypeData, TypeTranslator.GetTypeData (typeof(object)), ob + "[" + member.GlobalIndex + "]");
else return ob + ".@" + member.Name;
}
string GenerateMemberHasValueCondition (XmlTypeMapMember member, string ob, bool isValueList)
{
if (isValueList) {
- return ob + ".Length > " + member.Index;
+ return ob + ".Length > " + member.GlobalIndex;
}
else if (member.DefaultValue != System.DBNull.Value) {
string mem = ob + ".@" + member.Name;
void GenerateSetMemberValue (XmlTypeMapMember member, string ob, string value, bool isValueList)
{
- if (isValueList) WriteLine (ob + "[" + member.Index + "] = " + value + ";");
+ if (isValueList) WriteLine (ob + "[" + member.GlobalIndex + "] = " + value + ";");
else {
WriteLine (ob + ".@" + member.Name + " = " + value + ";");
if (member.IsOptionalValueType)
void SetMemberValue (XmlTypeMapMember member, object ob, object value, bool isValueList)
{
- if (isValueList) ((object[])ob)[member.Index] = value;
+ if (isValueList) ((object[])ob)[member.GlobalIndex] = value;
else {
member.SetValue (ob, value);
if (member.IsOptionalValueType)
object GetMemberValue (XmlTypeMapMember member, object ob, bool isValueList)
{
- if (isValueList) return ((object[])ob)[member.Index];
+ if (isValueList) return ((object[])ob)[member.GlobalIndex];
else return member.GetValue (ob);
}
object GetMemberValue (XmlTypeMapMember member, object ob, bool isValueList)
{
- if (isValueList) return ((object[])ob)[member.Index];
+ if (isValueList) return ((object[])ob)[member.GlobalIndex];
else return member.GetValue (ob);
}
bool MemberHasValue (XmlTypeMapMember member, object ob, bool isValueList)
{
if (isValueList) {
- return member.Index < ((object[])ob).Length;
+ return member.GlobalIndex < ((object[])ob).Length;
}
else if (member.DefaultValue != System.DBNull.Value) {
object val = GetMemberValue (member, ob, isValueList);
{
string _name;
int _index;
+ int _globalIndex;
TypeData _typeData;
MemberInfo _member;
MemberInfo _specifiedMember;
set { _index = value; }
}
+ public int GlobalIndex
+ {
+ get { return _globalIndex; }
+ set { _globalIndex = value; }
+ }
+
public bool IsOptionalValueType
{
get { return (_flags & OPTIONAL) != 0; }
\r
public void AddMember (XmlTypeMapMember member)\r
{\r
+ member.GlobalIndex = _allMembers.Count;\r
_allMembers.Add (member);\r
\r
if (!(member.DefaultValue is System.DBNull) && member.DefaultValue != null) {\r