2 // System.Xml.Serialization.XmlSerializationReader.cs
5 // Tim Coleman (tim@timcoleman.com)
6 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
7 // Lluis Sanchez Gual (lluis@ximian.com)
9 // Copyright (C) Tim Coleman, 2002
10 // (c) 2002 Ximian, Inc. (http://www.ximian.com)
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
25 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using System.Collections;
36 using System.Globalization;
38 using System.Xml.Schema;
39 using System.Reflection;
41 namespace System.Xml.Serialization
43 public abstract class XmlSerializationReader
45 : XmlSerializationGeneratedCode
55 ArrayList collItemFixups;
56 Hashtable typesCallbacks;
57 ArrayList noIDTargets;
59 Hashtable delayedListFixups;
60 XmlSerializer eventSource;
61 int delayedFixupId = 0;
62 Hashtable referencedObjects;
66 string w3InstanceNS2000;
67 string w3InstanceNS1999;
74 XmlQualifiedName arrayQName;
77 internal void Initialize (XmlReader reader, XmlSerializer eventSource)
79 w3SchemaNS = reader.NameTable.Add (XmlSchema.Namespace);
80 w3InstanceNS = reader.NameTable.Add (XmlSchema.InstanceNamespace);
81 w3InstanceNS2000 = reader.NameTable.Add ("http://www.w3.org/2000/10/XMLSchema-instance");
82 w3InstanceNS1999 = reader.NameTable.Add ("http://www.w3.org/1999/XMLSchema-instance");
83 soapNS = reader.NameTable.Add (XmlSerializer.EncodingNamespace);
84 wsdlNS = reader.NameTable.Add (XmlSerializer.WsdlNamespace);
85 nullX = reader.NameTable.Add ("null");
86 nil = reader.NameTable.Add ("nil");
87 typeX = reader.NameTable.Add ("type");
88 arrayType = reader.NameTable.Add ("arrayType");
90 this.eventSource = eventSource;
91 arrayQName = new XmlQualifiedName ("Array", soapNS);
95 private ArrayList EnsureArrayList (ArrayList list)
98 list = new ArrayList ();
102 private Hashtable EnsureHashtable (Hashtable hash)
105 hash = new Hashtable ();
109 protected XmlSerializationReader ()
113 protected XmlDocument Document
116 if (document == null)
117 document = new XmlDocument (reader.NameTable);
123 protected XmlReader Reader {
124 get { return reader; }
128 protected bool IsReturnValue
131 throw new NotImplementedException ();
134 throw new NotImplementedException ();
142 protected void AddFixup (CollectionFixup fixup)
144 collFixups = EnsureHashtable (collFixups);
145 collFixups [fixup.Id] = fixup;
147 if (delayedListFixups != null && delayedListFixups.ContainsKey (fixup.Id)) {
148 fixup.CollectionItems = delayedListFixups [fixup.Id];
149 delayedListFixups.Remove (fixup.Id);
153 protected void AddFixup (Fixup fixup)
155 fixups = EnsureArrayList (fixups);
159 void AddFixup (CollectionItemFixup fixup)
161 collItemFixups = EnsureArrayList (collItemFixups);
162 collItemFixups.Add(fixup);
165 protected void AddReadCallback (string name, string ns, Type type, XmlSerializationReadCallback read)
167 WriteCallbackInfo info = new WriteCallbackInfo ();
169 info.TypeName = name;
171 info.Callback = read;
172 typesCallbacks = EnsureHashtable (typesCallbacks);
173 typesCallbacks.Add (new XmlQualifiedName (name, ns), info);
176 protected void AddTarget (string id, object o)
179 targets = EnsureHashtable (targets);
180 if (targets [id] == null)
185 noIDTargets = EnsureArrayList (noIDTargets);
190 private string CurrentTag ()
192 switch (reader.NodeType) {
193 case XmlNodeType.Element:
194 return String.Format ("<{0} xmlns='{1}'>", reader.LocalName,
195 reader.NamespaceURI);
196 case XmlNodeType.Attribute:
198 case XmlNodeType.Text:
200 case XmlNodeType.ProcessingInstruction:
202 case XmlNodeType.Entity:
204 case XmlNodeType.EndElement:
211 protected Exception CreateCtorHasSecurityException (string typeName)
213 string message = string.Format ("The type '{0}' cannot"
214 + " be serialized because its parameterless"
215 + " constructor is decorated with declarative"
216 + " security permission attributes."
217 + " Consider using imperative asserts or demands"
218 + " in the constructor.", typeName);
219 return new InvalidOperationException (message);
222 protected Exception CreateInaccessibleConstructorException (string typeName)
224 string message = string.Format ("{0} cannot be serialized"
225 + " because it does not have a default public"
226 + " constructor.", typeName);
227 return new InvalidOperationException (message);
230 protected Exception CreateAbstractTypeException (string name, string ns)
232 string message = "The specified type is abstrace: name='" + name + "' namespace='" + ns + "', at " + CurrentTag ();
233 return new InvalidOperationException (message);
236 protected Exception CreateInvalidCastException (Type type, object value)
238 string message = String.Format (CultureInfo.InvariantCulture, "Cannot assign object of type {0} to an object of " +
239 "type {1}.", value.GetType (), type);
240 return new InvalidCastException (message);
243 protected Exception CreateReadOnlyCollectionException (string name)
245 string message = String.Format ("Could not serialize {0}. Default constructors are " +
246 "required for collections and enumerators.", name);
247 return new InvalidOperationException (message);
250 protected Exception CreateUnknownConstantException (string value, Type enumType)
252 string message = String.Format ("'{0}' is not a valid value for {1}.", value, enumType);
253 return new InvalidOperationException (message);
256 protected Exception CreateUnknownNodeException ()
258 string message = CurrentTag () + " was not expected";
259 return new InvalidOperationException (message);
262 protected Exception CreateUnknownTypeException (XmlQualifiedName type)
264 string message = "The specified type was not recognized: name='" + type.Name + "' namespace='" + type.Namespace + "', at " + CurrentTag ();
265 return new InvalidOperationException (message);
268 protected Array EnsureArrayIndex (Array a, int index, Type elementType)
270 if (a != null && index < a.Length)
280 Array result = Array.CreateInstance (elementType, size);
282 Array.Copy (a, result, index);
287 [MonoTODO ("Implement")]
288 protected void FixupArrayRefs (object fixup)
290 throw new NotImplementedException ();
293 [MonoTODO ("Implement")]
294 protected int GetArrayLength (string name, string ns)
296 throw new NotImplementedException ();
299 protected bool GetNullAttr ()
301 string na = reader.GetAttribute (nullX, w3InstanceNS);
303 na = reader.GetAttribute (nil, w3InstanceNS);
305 na = reader.GetAttribute (nullX, w3InstanceNS2000);
307 na = reader.GetAttribute (nullX, w3InstanceNS1999);
313 protected object GetTarget (string id)
315 if (targets == null) return null;
316 object ob = targets [id];
318 if (referencedObjects == null) referencedObjects = new Hashtable ();
319 referencedObjects [ob] = ob;
324 bool TargetReady (string id)
326 if (targets == null) return false;
327 return targets.ContainsKey (id);
330 protected XmlQualifiedName GetXsiType ()
332 string typeName = Reader.GetAttribute (typeX, XmlSchema.InstanceNamespace);
334 if (typeName == string.Empty || typeName == null) {
335 typeName = Reader.GetAttribute (typeX, w3InstanceNS1999);
336 if (typeName == string.Empty || typeName == null) {
337 typeName = Reader.GetAttribute (typeX, w3InstanceNS2000);
338 if (typeName == string.Empty || typeName == null)
343 int i = typeName.IndexOf (":");
344 if (i == -1) return new XmlQualifiedName (typeName, Reader.NamespaceURI);
347 string prefix = typeName.Substring(0,i);
348 string name = typeName.Substring (i+1);
349 return new XmlQualifiedName (name, Reader.LookupNamespace (prefix));
353 protected abstract void InitCallbacks ();
354 protected abstract void InitIDs ();
356 protected bool IsXmlnsAttribute (string name)
358 int length = name.Length;
363 return (name == "xmlns");
365 return name.StartsWith ("xmlns:");
368 protected void ParseWsdlArrayType (XmlAttribute attr)
370 if (attr.NamespaceURI == wsdlNS && attr.LocalName == arrayType)
372 string ns = "", type, dimensions;
373 TypeTranslator.ParseArrayType (attr.Value, out type, out ns, out dimensions);
374 if (ns != "") ns = Reader.LookupNamespace (ns) + ":";
375 attr.Value = ns + type + dimensions;
379 protected XmlQualifiedName ReadElementQualifiedName ()
381 if (reader.IsEmptyElement) {
383 return ToXmlQualifiedName (String.Empty);
386 reader.ReadStartElement ();
387 XmlQualifiedName xqn = ToXmlQualifiedName(reader.ReadString ());
388 reader.ReadEndElement ();
392 protected void ReadEndElement ()
394 while (reader.NodeType == XmlNodeType.Whitespace)
397 if (reader.NodeType != XmlNodeType.None) {
398 reader.ReadEndElement ();
404 protected bool ReadNull ()
409 if (reader.IsEmptyElement) {
414 reader.ReadStartElement();
415 while (reader.NodeType != XmlNodeType.EndElement)
422 protected XmlQualifiedName ReadNullableQualifiedName ()
427 return ReadElementQualifiedName ();
430 protected string ReadNullableString ()
435 return reader.ReadElementString ();
438 protected bool ReadReference (out string fixupReference)
440 string href = reader.GetAttribute ("href");
442 fixupReference = null;
447 throw new InvalidOperationException("href not found: " + href);
449 fixupReference = href.Substring (1);
450 if (!reader.IsEmptyElement) {
451 reader.ReadStartElement ();
459 protected object ReadReferencedElement ()
461 return ReadReferencedElement (Reader.LocalName, Reader.NamespaceURI);
464 WriteCallbackInfo GetCallbackInfo (XmlQualifiedName qname)
466 if (typesCallbacks == null)
468 typesCallbacks = new Hashtable ();
471 return (WriteCallbackInfo) typesCallbacks[qname];
474 protected object ReadReferencedElement (string name, string ns)
476 XmlQualifiedName qname = GetXsiType ();
477 if (qname == null) qname = new XmlQualifiedName (name, ns);
479 string id = Reader.GetAttribute ("id");
482 if (qname == arrayQName)
484 CollectionFixup fixup = (collFixups != null) ? (CollectionFixup) collFixups[id] : null;
485 if (ReadList (out ob))
487 // List complete (does not contain references)
490 fixup.Callback (fixup.Collection, ob);
491 collFixups.Remove (id);
492 ob = fixup.Collection;
495 else if (fixup != null)
497 fixup.CollectionItems = (object[])ob;
498 ob = fixup.Collection;
503 WriteCallbackInfo info = GetCallbackInfo (qname);
505 ob = ReadTypedPrimitive (qname, id != null);
507 ob = info.Callback();
513 bool ReadList (out object resultList)
515 string arrayTypeAttr = Reader.GetAttribute (arrayType, soapNS);
516 if (arrayTypeAttr == null) arrayTypeAttr = Reader.GetAttribute (arrayType, wsdlNS);
518 XmlQualifiedName qn = ToXmlQualifiedName (arrayTypeAttr);
519 int i = qn.Name.LastIndexOf ('[');
520 string dim = qn.Name.Substring (i);
521 string itemType = qn.Name.Substring (0,i);
522 int count = Int32.Parse (dim.Substring (1, dim.Length - 2), CultureInfo.InvariantCulture);
526 i = itemType.IndexOf ('['); if (i == -1) i = itemType.Length;
527 string baseType = itemType.Substring (0,i);
528 string arrayTypeName;
530 if (qn.Namespace == w3SchemaNS)
531 arrayTypeName = TypeTranslator.GetPrimitiveTypeData (baseType).Type.FullName + itemType.Substring (i);
534 WriteCallbackInfo info = GetCallbackInfo (new XmlQualifiedName (baseType,qn.Namespace));
535 arrayTypeName = info.Type.FullName + itemType.Substring (i) + ", " + info.Type.Assembly.FullName;
538 list = Array.CreateInstance (Type.GetType (arrayTypeName), count);
540 bool listComplete = true;
542 if (Reader.IsEmptyElement)
545 Reader.ReadStartElement ();
546 for (int n=0; n<count; n++)
548 Reader.MoveToContent ();
550 object item = ReadReferencingElement (itemType, qn.Namespace, out id);
552 list.SetValue (item,n);
555 AddFixup (new CollectionItemFixup (list, n, id));
556 listComplete = false;
559 Reader.ReadEndElement ();
566 protected void ReadReferencedElements ()
568 reader.MoveToContent();
569 XmlNodeType nt = reader.NodeType;
570 while (nt != XmlNodeType.EndElement && nt != XmlNodeType.None) {
571 ReadReferencedElement ();
572 reader.MoveToContent ();
573 nt = reader.NodeType;
576 // Registers delayed list
578 if (delayedListFixups != null)
580 foreach (DictionaryEntry entry in delayedListFixups)
581 AddTarget ((string)entry.Key, entry.Value);
585 if (collItemFixups != null)
587 foreach (CollectionItemFixup itemFixup in collItemFixups)
588 itemFixup.Collection.SetValue (GetTarget (itemFixup.Id), itemFixup.Index);
593 if (collFixups != null)
595 ICollection cfixups = collFixups.Values;
596 foreach (CollectionFixup fixup in cfixups)
597 fixup.Callback (fixup.Collection, fixup.CollectionItems);
600 // Fills class instances
604 foreach (Fixup fixup in fixups)
605 fixup.Callback (fixup);
608 if (targets != null) {
609 foreach (DictionaryEntry e in targets) {
610 if (e.Value != null && (referencedObjects == null || !referencedObjects.Contains (e.Value)))
611 UnreferencedObject ((string)e.Key, e.Value);
616 protected object ReadReferencingElement (out string fixupReference)
618 return ReadReferencingElement (Reader.LocalName, Reader.NamespaceURI, false, out fixupReference);
621 protected object ReadReferencingElement (string name, string ns, out string fixupReference)
623 return ReadReferencingElement (name, ns, false, out fixupReference);
626 protected object ReadReferencingElement (string name,
628 bool elementCanBeType,
629 out string fixupReference)
633 fixupReference = null;
637 string refid = Reader.GetAttribute ("href");
639 if (refid == string.Empty || refid == null)
641 fixupReference = null;
643 XmlQualifiedName qname = GetXsiType ();
644 if (qname == null) qname = new XmlQualifiedName (name, ns);
645 string arrayTypeAttr = Reader.GetAttribute (arrayType, soapNS);
647 if (qname == arrayQName || arrayTypeAttr != null)
649 delayedListFixups = EnsureHashtable (delayedListFixups);
650 fixupReference = "__<" + (delayedFixupId++) + ">";
652 ReadList (out items);
653 delayedListFixups [fixupReference] = items;
658 WriteCallbackInfo info = GetCallbackInfo (qname);
660 return ReadTypedPrimitive (qname, true);
662 return info.Callback();
667 if (refid.StartsWith ("#")) refid = refid.Substring (1);
670 if (TargetReady (refid))
672 fixupReference = null;
673 return GetTarget (refid);
677 fixupReference = refid;
683 protected IXmlSerializable ReadSerializable (IXmlSerializable serializable)
685 if (ReadNull ()) return null;
686 int depth = reader.Depth;
687 serializable.ReadXml (reader);
688 Reader.MoveToContent ();
689 while (reader.Depth > depth)
691 if (reader.Depth == depth && reader.NodeType == XmlNodeType.EndElement)
692 reader.ReadEndElement ();
696 protected string ReadString (string value)
698 if (value == null || value == String.Empty)
699 return reader.ReadString ();
701 return (value + reader.ReadString ());
704 protected object ReadTypedPrimitive (XmlQualifiedName qname)
706 return ReadTypedPrimitive (qname, false);
709 object ReadTypedPrimitive (XmlQualifiedName qname, bool reportUnknown)
711 if (qname == null) qname = GetXsiType ();
713 TypeData typeData = TypeTranslator.FindPrimitiveTypeData (qname.Name);
714 if (typeData == null || typeData.SchemaType != SchemaTypes.Primitive)
716 // Put everything into a node array
717 XmlNode node = Document.ReadNode (reader);
720 OnUnknownNode (node, null);
722 if (node.ChildNodes.Count == 0 && node.Attributes.Count == 0)
723 return new Object ();
725 XmlElement elem = node as XmlElement;
728 return new XmlNode[] {node};
730 XmlNode[] nodes = new XmlNode[elem.Attributes.Count + elem.ChildNodes.Count];
732 foreach (XmlNode no in elem.Attributes)
734 foreach (XmlNode no in elem.ChildNodes)
740 if (typeData.Type == typeof (XmlQualifiedName)) return ReadNullableQualifiedName ();
741 return XmlCustomFormatter.FromXmlString (typeData, Reader.ReadElementString ());
744 protected XmlNode ReadXmlNode (bool wrapped)
746 XmlNode node = Document.ReadNode (reader);
748 return node.FirstChild;
753 protected XmlDocument ReadXmlDocument (bool wrapped)
756 reader.ReadStartElement ();
758 XmlDocument doc = new XmlDocument ();
759 XmlNode node = doc.ReadNode (reader);
760 doc.AppendChild (node);
763 reader.ReadEndElement ();
768 protected void Referenced (object o)
771 if (referencedObjects == null) referencedObjects = new Hashtable ();
772 referencedObjects [o] = o;
776 protected Array ShrinkArray (Array a, int length, Type elementType, bool isNullable)
778 if (length == 0 && isNullable) return null;
779 if (a == null) return Array.CreateInstance (elementType, length);
780 if (a.Length == length) return a;
782 Array result = Array.CreateInstance (elementType, length);
783 Array.Copy (a, result, length);
787 protected byte[] ToByteArrayBase64 (bool isNull)
789 return Convert.FromBase64String (Reader.ReadString());
792 [MonoTODO ("Implement")]
793 protected static byte[] ToByteArrayBase64 (string value)
795 throw new NotImplementedException ();
798 [MonoTODO ("Implement")]
799 protected byte[] ToByteArrayHex (bool isNull)
801 throw new NotImplementedException ();
804 [MonoTODO ("Implement")]
805 protected static byte[] ToByteArrayHex (string value)
807 throw new NotImplementedException ();
810 protected static char ToChar (string value)
812 return XmlCustomFormatter.ToChar (value);
815 protected static DateTime ToDate (string value)
817 return XmlCustomFormatter.ToDate (value);
820 protected static DateTime ToDateTime (string value)
822 return XmlCustomFormatter.ToDateTime (value);
825 protected static long ToEnum (string value, Hashtable h, string typeName)
827 return XmlCustomFormatter.ToEnum (value, h, typeName, true);
830 protected static DateTime ToTime (string value)
832 return XmlCustomFormatter.ToTime (value);
835 protected static string ToXmlName (string value)
837 return XmlCustomFormatter.ToXmlName (value);
840 protected static string ToXmlNCName (string value)
842 return XmlCustomFormatter.ToXmlNCName (value);
845 protected static string ToXmlNmToken (string value)
847 return XmlCustomFormatter.ToXmlNmToken (value);
850 protected static string ToXmlNmTokens (string value)
852 return XmlCustomFormatter.ToXmlNmTokens (value);
855 protected XmlQualifiedName ToXmlQualifiedName (string value)
859 int lastColon = value.LastIndexOf (':');
860 string decodedValue = XmlConvert.DecodeName (value);
862 name = reader.NameTable.Add (decodedValue);
863 ns = reader.LookupNamespace (String.Empty);
865 string prefix = value.Substring (0, lastColon);
866 ns = reader.LookupNamespace (prefix);
868 throw new InvalidOperationException ("namespace " + prefix + " not defined");
870 name = reader.NameTable.Add (value.Substring (lastColon + 1));
873 return new XmlQualifiedName (name, ns);
876 protected void UnknownAttribute (object o, XmlAttribute attr)
878 int line_number, line_position;
880 if (Reader is XmlTextReader){
881 line_number = ((XmlTextReader)Reader).LineNumber;
882 line_position = ((XmlTextReader)Reader).LinePosition;
888 if (eventSource != null)
889 eventSource.OnUnknownAttribute (new XmlAttributeEventArgs (attr, line_number, line_position, o));
892 protected void UnknownElement (object o, XmlElement elem)
894 int line_number, line_position;
896 if (Reader is XmlTextReader){
897 line_number = ((XmlTextReader)Reader).LineNumber;
898 line_position = ((XmlTextReader)Reader).LinePosition;
904 if (eventSource != null)
905 eventSource.OnUnknownElement (new XmlElementEventArgs (elem, line_number, line_position,o));
908 protected void UnknownNode (object o)
910 OnUnknownNode (ReadXmlNode (false), o);
913 void OnUnknownNode (XmlNode node, object o)
915 int line_number, line_position;
917 if (Reader is XmlTextReader){
918 line_number = ((XmlTextReader)Reader).LineNumber;
919 line_position = ((XmlTextReader)Reader).LinePosition;
925 if (node is XmlAttribute)
927 UnknownAttribute (o, (XmlAttribute)node);
930 else if (node is XmlElement)
932 UnknownElement (o, (XmlElement) node);
937 if (eventSource != null)
938 eventSource.OnUnknownNode (new XmlNodeEventArgs(line_number, line_position, node.LocalName, node.Name, node.NamespaceURI, node.NodeType, o, node.Value));
940 if (Reader.ReadState == ReadState.EndOfFile)
941 throw new InvalidOperationException ("End of document found");
945 protected void UnreferencedObject (string id, object o)
947 if (eventSource != null)
948 eventSource.OnUnreferencedObject (new UnreferencedObjectEventArgs (o,id));
951 #endregion // Methods
953 class WriteCallbackInfo
956 public string TypeName;
957 public string TypeNs;
958 public XmlSerializationReadCallback Callback;
961 protected class CollectionFixup {
963 XmlSerializationCollectionFixupCallback callback;
965 object collectionItems;
968 public CollectionFixup (object collection, XmlSerializationCollectionFixupCallback callback, string id)
970 this.callback = callback;
971 this.collection = collection;
975 public XmlSerializationCollectionFixupCallback Callback {
976 get { return callback; }
979 public object Collection {
980 get { return collection; }
987 internal object CollectionItems
989 get { return collectionItems; }
990 set { collectionItems = value; }
994 protected class Fixup {
998 XmlSerializationFixupCallback callback;
1000 public Fixup (object o, XmlSerializationFixupCallback callback, int count)
1003 this.callback = callback;
1004 this.ids = new string[count];
1007 public Fixup (object o, XmlSerializationFixupCallback callback, string[] ids)
1011 this.callback = callback;
1014 public XmlSerializationFixupCallback Callback {
1015 get { return callback; }
1018 public string[] Ids {
1022 public object Source {
1023 get { return source; }
1024 set { source = value; }
1028 protected class CollectionItemFixup
1034 public CollectionItemFixup (Array list, int index, string id)
1041 public Array Collection
1043 get { return list; }
1048 get { return index; }
1059 protected bool DecodeName
1061 get { throw new NotImplementedException(); }
1062 set { throw new NotImplementedException(); }
1066 protected string CollapseWhitespace (string value)
1068 throw new NotImplementedException ();
1072 protected Exception CreateBadDerivationException (
1080 throw new NotImplementedException ();
1084 protected Exception CreateInvalidCastException (Type type, object value, string id)
1086 throw new NotImplementedException ();
1090 protected Exception CreateMissingIXmlSerializableType (string name, string ns, string clrType)
1092 throw new NotImplementedException ();
1096 protected IXmlSerializable ReadSerializable (IXmlSerializable serializable, bool wrapped)
1098 throw new NotImplementedException ();
1102 protected string ReadString (string value, bool trim)
1104 throw new NotImplementedException ();
1108 protected object ReadTypedNull (XmlQualifiedName type)
1110 throw new NotImplementedException ();
1114 protected static Assembly ResolveDynamicAssembly (string assemblyFullName)
1116 throw new NotImplementedException ();