+2003-06-16 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
+
+ * XmlSerializationReader.cs : Synchronous fix with
+ XmlElement.GetAttribute(name, ns) fix for GetNullAttr().
+ * added XmlTypeMapMemberNamespace.cs.
+ * XmlReflectionImporter,
+ XmlSerializationReaderInterpreter.cs,
+ XmlSerializationWriterInterpreter.cs,
+ XmlTypeMapping.cs : support for XmlNamespaceDeclarationAttribute.
+
2003-06-16 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
* XmlSerializationWriter.cs : some QName handling fix.
// Import members
- try
- {
+// try
+// {
ICollection members = GetReflectionMembers (type);
foreach (XmlReflectionMember rmember in members)
{
if (rmember.XmlAttributes.XmlIgnore) continue;
classMap.AddMember (CreateMapMember (rmember, map.Namespace));
}
- }
- catch (Exception ex) {
- throw helper.CreateError (map, ex.Message);
- }
+// }
+// catch (Exception ex) {
+// throw helper.CreateError (map, ex.Message);
+// }
// Import derived classes
else
throw new InvalidOperationException ("XmlAnyElementAttribute can only be applied to members of type XmlElement, XmlElement[] or XmlNode[]");
}
+ else if (atts.Xmlns)
+ {
+ XmlTypeMapMemberNamespaces mapNamespaces = new XmlTypeMapMemberNamespaces ();
+ mapMember = mapNamespaces;
+ }
else if (atts.XmlAttribute != null)
{
// An attribute
protected bool GetNullAttr ()
{
string na = reader.GetAttribute (nullX, w3InstanceNS);
- if (na == string.Empty) {
+ if (na == null) {
na = reader.GetAttribute (nil, w3InstanceNS);
- if (na == string.Empty) {
+ if (na == null) {
na = reader.GetAttribute (nullX, w3InstanceNS2000);
- if (na == string.Empty)
+ if (na == null)
na = reader.GetAttribute (nullX, w3InstanceNS1999);
}
}
- return (na != string.Empty);
+ return (na != null);
}
protected object GetTarget (string id)
}
else if (IsXmlnsAttribute(Reader.Name))
{
- // Ignore
+ // If the map has NamespaceDeclarations,
+ // then store this xmlns to the given member.
+ // If the instance doesn't exist, then create.
+ if (map.NamespaceDeclarations != null) {
+ XmlSerializerNamespaces nss = this.GetMemberValue (map.NamespaceDeclarations, ob, isValueList) as XmlSerializerNamespaces;
+ if (nss == null) {
+ nss = new XmlSerializerNamespaces ();
+ SetMemberValue (map.NamespaceDeclarations, ob, nss, isValueList);
+ }
+ if (Reader.Prefix == "xmlns")
+nss.Add (Reader.LocalName, Reader.Value);
+ else
+ nss.Add ("", Reader.Value);
+ }
}
else if (anyAttrMember != null)
{
void WriteObjectElement (XmlTypeMapping typeMap, object ob, string element, string namesp)
{
ClassMap map = (ClassMap)typeMap.ObjectMap;
+ if (map.NamespaceDeclarations != null)
+ WriteNamespaceDeclarations ((XmlSerializerNamespaces) map.NamespaceDeclarations.GetValue (ob));
WriteMembers (map, ob, false);
}
--- /dev/null
+//
+// XmlTypeMapMemberNamespaces.cs:
+//
+// Author:
+// Atsushi Enomoto
+//
+// (C) 2003 Atsushi Enomoto
+//
+
+using System;
+using System.Xml.Schema;
+
+namespace System.Xml.Serialization
+{
+ // XmlTypeMapMemberNamespaces
+ // A member of a class that must be used to add namespace declarations.
+ // It must be limited at most 1 in a class.
+
+ internal class XmlTypeMapMemberNamespaces: XmlTypeMapMember
+ {
+ public XmlTypeMapMemberNamespaces()
+ {
+ }
+ }
+}
ArrayList _flatLists;\r
XmlTypeMapMemberAnyElement _defaultAnyElement;\r
XmlTypeMapMemberAnyAttribute _defaultAnyAttribute;\r
+ XmlTypeMapMemberNamespaces _namespaceDeclarations;\r
XmlTypeMapMember _xmlTextCollector;\r
\r
public void AddMember (XmlTypeMapMember member)\r
_defaultAnyAttribute = (XmlTypeMapMemberAnyAttribute) member;\r
return;\r
}\r
+ else if (member is XmlTypeMapMemberNamespaces)\r
+ {\r
+ _namespaceDeclarations = (XmlTypeMapMemberNamespaces) member;\r
+ return;\r
+ }\r
\r
if (member is XmlTypeMapMemberElement && ((XmlTypeMapMemberElement)member).IsXmlTextCollector)\r
{\r
get { return _defaultAnyAttribute; }\r
}\r
\r
+ public XmlTypeMapMemberNamespaces NamespaceDeclarations\r
+ {\r
+ get { return _namespaceDeclarations; }\r
+ }\r
+\r
public ICollection AttributeMembers\r
{\r
get { return (_attributeMembers != null) ? _attributeMembers.Values : null; }\r