FormatterServices.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. //
  2. // System.Runtime.Serialization.FormatterServices
  3. //
  4. // Authors:
  5. // Gonzalo Paniagua Javier ([email protected])
  6. //
  7. // (C) 2002 Ximian, Inc (http://www.ximian.com)
  8. //
  9. using System;
  10. using System.Reflection;
  11. namespace System.Runtime.Serialization
  12. {
  13. public sealed class FormatterServices
  14. {
  15. private FormatterServices ()
  16. {
  17. }
  18. public static object [] GetObjectData (object obj, MemberInfo [] members)
  19. {
  20. if (obj == null)
  21. throw new ArgumentNullException ("obj");
  22. if (members == null)
  23. throw new ArgumentNullException ("members");
  24. int n = members.Length;
  25. object [] result = new object [n];
  26. for (int i = 0; i < n; i++) {
  27. MemberInfo member = members [i];
  28. if (member == null)
  29. throw new ArgumentNullException (String.Format ("members[{0}]", i));
  30. if (member.MemberType != MemberTypes.Field)
  31. throw new SerializationException (
  32. String.Format ("members [{0}] is not a field.", i));
  33. FieldInfo fi = member as FieldInfo; //FIXME: Can fi be null?
  34. result [i] = fi.GetValue (obj);
  35. }
  36. return result;
  37. }
  38. public static MemberInfo [] GetSerializableMembers (Type type)
  39. {
  40. StreamingContext st = new StreamingContext (StreamingContextStates.All);
  41. return GetSerializableMembers (type, st);
  42. }
  43. [MonoTODO]
  44. public static MemberInfo [] GetSerializableMembers (Type type, StreamingContext context)
  45. {
  46. if (type == null)
  47. throw new ArgumentNullException ("type");
  48. throw new NotImplementedException ();
  49. }
  50. public static Type GetTypeFromAssembly (Assembly assem, string name)
  51. {
  52. if (assem == null)
  53. throw new ArgumentNullException ("assem");
  54. if (name == null)
  55. throw new ArgumentNullException ("name");
  56. return assem.GetType (name);
  57. }
  58. [MonoTODO]
  59. public static object GetUninitializedObject (Type type)
  60. {
  61. throw new NotImplementedException ();
  62. }
  63. public static object PopulateObjectMembers (object obj, MemberInfo [] members, object [] data)
  64. {
  65. if (obj == null)
  66. throw new ArgumentNullException ("obj");
  67. if (members == null)
  68. throw new ArgumentNullException ("members");
  69. if (data == null)
  70. throw new ArgumentNullException ("data");
  71. int length = members.Length;
  72. if (length != data.Length)
  73. throw new ArgumentException ("different length in members and data");
  74. for (int i = 0; i < length; i++) {
  75. MemberInfo member = members [i];
  76. if (member == null)
  77. throw new ArgumentNullException (String.Format ("members[{0}]", i));
  78. if (member.MemberType != MemberTypes.Field)
  79. throw new SerializationException (
  80. String.Format ("members [{0}] is not a field.", i));
  81. FieldInfo fi = member as FieldInfo; //FIXME: can fi be null?
  82. fi.SetValue (obj, data [i]);
  83. }
  84. return obj;
  85. }
  86. }
  87. }