get { return references; }
}
-#if !MOONLIGHT
XmlDocument document;
XmlDocument XmlDocument {
get { return (document = document ?? new XmlDocument ()); }
}
-#endif
// This method handles z:Ref, xsi:nil and primitive types, and then delegates to DeserializeByMap() for anything else.
public object Deserialize (Type type, XmlReader reader)
{
-#if !MOONLIGHT
if (type == typeof (XmlElement))
return XmlDocument.ReadNode (reader);
else if (type == typeof (XmlNode [])) {
reader.ReadEndElement ();
return l.ToArray ();
}
-#endif
QName graph_qname = null;
if (type.IsGenericType && type.GetGenericTypeDefinition () == typeof (Nullable<>)) {
object DeserializeByMap (QName name, Type type, XmlReader reader)
{
- SerializationMap map = resolved_qnames.ContainsKey (name) ? types.FindUserMap (type) : types.FindUserMap (name); // use type when the name is "resolved" one. Otherwise use name (there are cases that type cannot be resolved by type).
+ SerializationMap map = null;
+ // List<T> and T[] have the same QName, use type to find map work better.
+ if(name.Name.StartsWith ("ArrayOf", StringComparison.Ordinal) || resolved_qnames.ContainsKey (name))
+ map = types.FindUserMap (type);
+ else
+ map = types.FindUserMap (name); // use type when the name is "resolved" one. Otherwise use name (there are cases that type cannot be resolved by type).
if (map == null && (name.Name.StartsWith ("ArrayOf", StringComparison.Ordinal) ||
name.Namespace == KnownTypeCollection.MSArraysNamespace ||
name.Namespace.StartsWith (KnownTypeCollection.DefaultClrNamespaceBase, StringComparison.Ordinal))) {
if (name.StartsWith ("ArrayOf", StringComparison.Ordinal)) {
name = name.Substring (7); // strip "ArrayOf"
if (ns == KnownTypeCollection.MSArraysNamespace)
- return GetTypeFromNamePair (name, String.Empty).MakeArrayType ();
+ return GetTypeFromNamePair (name, KnownTypeCollection.MSSimpleNamespace).MakeArrayType ();
makeArray = true;
}
foreach (var ass in AppDomain.CurrentDomain.GetAssemblies ()) {
Type [] types;
-#if MOONLIGHT
- try {
- types = ass.GetTypes ();
- } catch (System.Reflection.ReflectionTypeLoadException rtle) {
- types = rtle.Types;
- }
-#else
types = ass.GetTypes ();
-#endif
if (types == null)
continue;