diff --git a/src/RealmJson.Extensions/Extension.cs b/src/RealmJson.Extensions/Extension.cs
index 7968d3b..7f87abc 100644
--- a/src/RealmJson.Extensions/Extension.cs
+++ b/src/RealmJson.Extensions/Extension.cs
@@ -29,7 +29,7 @@ public static class RealmDoesJson
///
/// Realm Instance
/// Json string
- /// bool.
+ /// bool.
/// RealmOject-based Class..
public static T CreateObjectFromJson(this Realm realm, string jsonString, bool inTransaction = false) where T : RealmObject
{
@@ -225,7 +225,7 @@ static void CreateUpdateRecordsViaAutoMapper(Realm realm, PropertyInfo pkProp
// });
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- static T CreateObject(Realm realm, T realmObject, bool updateRecord, bool inTransaction ) where T : RealmObject
+ static T CreateObject(Realm realm, T realmObject, bool updateRecord, bool inTransaction) where T : RealmObject
{
if (inTransaction)
{
@@ -278,6 +278,33 @@ static RealmObject FindByPKDynamic(Realm realm, Type type, object primaryKeyValu
return realm.Find(type.Name, (string)primaryKeyValue);
}
+ public static T NonManagedCopy(this RealmObject realmObject) where T : RealmObject
+ {
+ var newRecordConfiguration = new MapperConfiguration(cfg =>
+ {
+ cfg.CreateMap();
+ });
+ var newMapper = newRecordConfiguration.CreateMapper();
+
+ var realmObjectCopy = (T)Activator.CreateInstance(typeof(T));
+ newMapper.Map(realmObject, realmObjectCopy);
+ return realmObjectCopy;
+ }
+
+ public static RealmObject NonManagedCopy(this RealmObject realmObject)
+ {
+ var objectType = realmObject.GetType();
+ var newRecordConfiguration = new MapperConfiguration(cfg =>
+ {
+ cfg.CreateMap(objectType, objectType);
+ });
+ var newMapper = newRecordConfiguration.CreateMapper();
+
+ var realmObjectCopy = Activator.CreateInstance(objectType) as RealmObject;
+ newMapper.Map(realmObject, realmObjectCopy);
+ return realmObjectCopy;
+ }
+
//void createOrUpdateAllFromJson(Class clazz, InputStream in)
//Tries to update a list of existing objects identified by their primary key with new JSON data.
//
diff --git a/src/RealmJson.Extensions/SushiHangover.RealmJson.csproj b/src/RealmJson.Extensions/SushiHangover.RealmJson.csproj
index c803247..4839e5e 100644
--- a/src/RealmJson.Extensions/SushiHangover.RealmJson.csproj
+++ b/src/RealmJson.Extensions/SushiHangover.RealmJson.csproj
@@ -51,18 +51,18 @@
..\packages\AutoMapper.5.1.1\lib\portable-net45+win8+wpa81\AutoMapper.dll
-
- ..\packages\Newtonsoft.Json.9.0.2-beta1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll
-
-
- ..\packages\DotNetCross.Memory.Unsafe.0.2.2\lib\DotNetCross.Memory.Unsafe.dll
-
..\packages\Remotion.Linq.2.1.1\lib\portable-net45+win+wpa81+wp80\Remotion.Linq.dll
..\packages\Realm.Database.1.0.3\lib\portable-net45+sl5+wp8+wpa81+win8+monoandroid+Xamarin.iOS10+monotouch+Xamarin.Mac\Realm.dll
+
+ ..\packages\Newtonsoft.Json.9.0.2-beta2\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll
+
+
+ ..\packages\DotNetCross.Memory.Unsafe.0.2.3.4\lib\netstandard1.0\DotNetCross.Memory.Unsafe.dll
+
diff --git a/src/RealmJson.Extensions/packages.config b/src/RealmJson.Extensions/packages.config
index 9421e9a..589c24b 100644
--- a/src/RealmJson.Extensions/packages.config
+++ b/src/RealmJson.Extensions/packages.config
@@ -1,9 +1,9 @@
-
+
-
+
diff --git a/src/RealmJson.Shared.Tests/Tests.Shared.cs b/src/RealmJson.Shared.Tests/Tests.Shared.cs
index 6901c40..f945185 100644
--- a/src/RealmJson.Shared.Tests/Tests.Shared.cs
+++ b/src/RealmJson.Shared.Tests/Tests.Shared.cs
@@ -269,6 +269,86 @@ public void CreateAllFromJson_InvalidStream()
}
}
+ [Test]
+ public void NonManagedCopyFromNonManagedGenericType()
+ {
+ var obj1 = new State
+ {
+ name = "ZZ",
+ abbreviation = "Z"
+ };
+ var obj2 = obj1.NonManagedCopy();
+ Assert.False(obj2.IsManaged);
+ // Non-managed objects are never equivalate, this RealmObject.Equals can not be used
+ Assert.AreEqual(obj1.abbreviation, obj2.abbreviation);
+ Assert.AreEqual(obj1.name, obj2.name);
+ }
+
+ [Test]
+ public void NonManagedCopyFromNonManagedRealmObjectType()
+ {
+ var obj1 = new State
+ {
+ name = "ZZ",
+ abbreviation = "Z"
+ };
+ var obj2 = obj1.NonManagedCopy();
+ var obj3 = obj2 as State;
+ // Non-managed objects are never equivalate, this RealmObject.Equals can not be used
+ Assert.False(obj3.IsManaged);
+ Assert.AreEqual(obj1.abbreviation, obj3.abbreviation);
+ Assert.AreEqual(obj1.name, obj3.name);
+ }
+
+ [Test]
+ public void NonManagedCopyFromManagedGenericType()
+ {
+ using (var theRealm = Realm.GetInstance(RealmDBTempPath()))
+ {
+ State obj1 = null;
+ theRealm.Write(() =>
+ {
+ var tmp = new State
+ {
+ name = "ZZ",
+ abbreviation = "Z"
+ };
+ obj1 = theRealm.Add(tmp);
+ });
+ Assert.True(obj1.IsManaged);
+ var obj2 = obj1.NonManagedCopy();
+ // Non-managed objects are never equivalate, this RealmObject.Equals can not be used
+ Assert.False(obj2.IsManaged);
+ Assert.AreEqual(obj1.abbreviation, obj2.abbreviation);
+ Assert.AreEqual(obj1.name, obj2.name);
+ }
+ }
+
+ [Test]
+ public void NonManagedCopyFromManagedRealmObjectType()
+ {
+ using (var theRealm = Realm.GetInstance(RealmDBTempPath()))
+ {
+ State obj1 = null;
+ theRealm.Write(() =>
+ {
+ var tmp = new State
+ {
+ name = "ZZ",
+ abbreviation = "Z"
+ };
+ obj1 = theRealm.Add(tmp);
+ });
+ Assert.True(obj1.IsManaged);
+ var obj2 = obj1.NonManagedCopy() as State;
+ // Non-managed objects are never equivalate, this RealmObject.Equals can not be used
+ Assert.False(obj2.IsManaged);
+ Assert.AreEqual(obj1.abbreviation, obj2.abbreviation);
+ Assert.AreEqual(obj1.name, obj2.name);
+ }
+ }
+
+
#endif
}
diff --git a/src/RealmJson.Test.Droid/packages.config b/src/RealmJson.Test.Droid/packages.config
index 1641024..4672998 100644
--- a/src/RealmJson.Test.Droid/packages.config
+++ b/src/RealmJson.Test.Droid/packages.config
@@ -3,30 +3,30 @@
-
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
-
+
diff --git a/src/RealmJson.Test.iOS/RealmJson.Test.iOS.csproj b/src/RealmJson.Test.iOS/RealmJson.Test.iOS.csproj
index 0d1951a..2d841d1 100644
--- a/src/RealmJson.Test.iOS/RealmJson.Test.iOS.csproj
+++ b/src/RealmJson.Test.iOS/RealmJson.Test.iOS.csproj
@@ -96,9 +96,6 @@
..\packages\AutoMapper.5.1.1\lib\netstandard1.3\AutoMapper.dll
-
- ..\packages\DotNetCross.Memory.Unsafe.0.2.2\lib\dotnet\DotNetCross.Memory.Unsafe.dll
-
..\packages\Remotion.Linq.2.1.1\lib\portable-net45+win+wpa81+wp80\Remotion.Linq.dll
@@ -109,6 +106,9 @@
..\packages\Newtonsoft.Json.9.0.2-beta2\lib\netstandard1.1\Newtonsoft.Json.dll
+
+ ..\packages\DotNetCross.Memory.Unsafe.0.2.3.4\lib\netstandard1.0\DotNetCross.Memory.Unsafe.dll
+
diff --git a/src/RealmJson.Test.iOS/packages.config b/src/RealmJson.Test.iOS/packages.config
index 1ef74e5..1e2d69c 100644
--- a/src/RealmJson.Test.iOS/packages.config
+++ b/src/RealmJson.Test.iOS/packages.config
@@ -1,7 +1,7 @@
-
+
@@ -23,7 +23,7 @@
-
+