Ваш пользовательский класс должен реализовывать интерфейс Parcelable. Типичная реализация Parcelable:
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
И затем вы можете отправить свои данные, используя что-то вроде этого:
Intent intent;
intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putParcelableArrayListExtra("Workout", workout);
startActivity(intent);
И получить:
workout = getIntent().getParcelableArrayListExtra("Workout");
Примечание : Убедитесь, что каждый вложенный класс вашего основного пользовательского класса имеет реализованный интерфейс Serializable
Править: Я нашел еще лучшее решение, которое работает с ResourceDictionaries:
Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("/test;component/myresource.xaml");
Ну, я не мог заставить это работать с ResourceDictionaries, таким образом, я использую старые добрые Файлы ресурсов вместо этого ;) Для любого заинтересованного, вот то, как я сделал это:
Assembly a = Assembly.LoadFile(@"C:\temp\test.dll");
ResourceManager rm = new ResourceManager("NameOfResource", a);
object o = rm.GetObject("xyz");
Можно получить "NameOfResource" с Отражателем как предложенный Ian.
Захватите копию Отражателя (Lutz передал это теперь). Используйте это для рассмотрения блока и пространства имен и т.д. ресурсов в нем.
Затем считайте во встроенном ресурсе что-то вроде этого;
Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
using (System.IO.Stream s = asm.GetManifestResourceStream(<yourname>)
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(s))
{
string xml = reader.ReadToEnd();
}
}
Вам действительно нужно написать Uri следующим образом:
Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"pack://application:,,,/test;component/myresource.xaml");