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