//\r
// (C) 2003 Lluis Sanchez Gual\r
\r
-// FIXME: Implement the missing binary elements\r
-\r
using System;\r
using System.Runtime.Serialization;\r
using System.IO;\r
using System.Collections;\r
using System.Reflection;\r
using System.Runtime.Remoting.Messaging;\r
+using System.Globalization;\r
\r
namespace System.Runtime.Serialization.Formatters.Binary\r
{\r
metadata.MemberInfos = new MemberInfo [fieldCount];\r
for (int n=0; n<fieldCount; n++)\r
{\r
- MemberInfo[] members = metadata.Type.GetMember (names[n], MemberTypes.Field | MemberTypes.Property, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r
+ MemberInfo[] members = null;\r
+ string memberName = names[n];\r
+ \r
+ int i = memberName.IndexOf ('+');\r
+ if (i != -1) {\r
+ string baseTypeName = names[n].Substring (0,i);\r
+ memberName = names[n].Substring (i+1);\r
+ Type t = metadata.Type.BaseType;\r
+ while (t != null) {\r
+ if (t.Name == baseTypeName) {\r
+ members = t.GetMember (memberName, MemberTypes.Field | MemberTypes.Property, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r
+ break;\r
+ }\r
+ else\r
+ t = t.BaseType;\r
+ }\r
+ }\r
+ else\r
+ members = metadata.Type.GetMember (memberName, MemberTypes.Field | MemberTypes.Property, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);\r
+ \r
+ if (members == null || members.Length == 0) throw new SerializationException ("Field \"" + names[n] + "\" not found in class " + metadata.Type.FullName);\r
if (members.Length > 1) throw new SerializationException ("There are two public members named \"" + names[n] + "\" in the class hirearchy of " + metadata.Type.FullName);\r
- if (members.Length == 0) throw new SerializationException ("Field \"" + names[n] + "\" not found in class " + metadata.Type.FullName);\r
metadata.MemberInfos [n] = members[0];\r
}\r
metadata.MemberNames = null; // Info now in MemberInfos\r
return new DateTime (reader.ReadInt64());\r
\r
case TypeCode.Decimal:\r
- return reader.ReadDecimal();\r
+ return Decimal.Parse (reader.ReadString(), CultureInfo.InvariantCulture);\r
\r
case TypeCode.Double:\r
return reader.ReadDouble();\r