diff --git a/PerpetuumSoft.Knockout.Tests/KnockoutUtilitiesTest.cs b/PerpetuumSoft.Knockout.Tests/KnockoutUtilitiesTest.cs
new file mode 100644
index 0000000..507404d
--- /dev/null
+++ b/PerpetuumSoft.Knockout.Tests/KnockoutUtilitiesTest.cs
@@ -0,0 +1,24 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace PerpetuumSoft.Knockout.Tests
+{
+ [TestClass]
+ public class KnockoutUtilitiesTest
+ {
+ [TestMethod]
+ public void ConvertDataTest01()
+ {
+ TestModel model = new TestModel();
+ bool doesNotCauseStackOverflow = false;
+
+ Knockout.KnockoutUtilities.ConvertData(model);
+
+ doesNotCauseStackOverflow = true;
+ Assert.IsTrue(doesNotCauseStackOverflow);
+ }
+ }
+}
diff --git a/PerpetuumSoft.Knockout.Tests/PerpetuumSoft.Knockout.Tests.csproj b/PerpetuumSoft.Knockout.Tests/PerpetuumSoft.Knockout.Tests.csproj
index 90e7f46..869f3a2 100644
--- a/PerpetuumSoft.Knockout.Tests/PerpetuumSoft.Knockout.Tests.csproj
+++ b/PerpetuumSoft.Knockout.Tests/PerpetuumSoft.Knockout.Tests.csproj
@@ -67,6 +67,7 @@
+
diff --git a/PerpetuumSoft.Knockout.Tests/TestModel.cs b/PerpetuumSoft.Knockout.Tests/TestModel.cs
index dd5583d..8d028e2 100644
--- a/PerpetuumSoft.Knockout.Tests/TestModel.cs
+++ b/PerpetuumSoft.Knockout.Tests/TestModel.cs
@@ -21,6 +21,8 @@ public class TestModel
public TestModel SubModel { get; set; }
+ public static TestModel StaticReferenceModel { get { return new TestModel(); } }
+
[ScriptIgnore]
public Expression> Concatenation
{
diff --git a/PerpetuumSoft.Knockout/Utilities/KnockoutUtilities.cs b/PerpetuumSoft.Knockout/Utilities/KnockoutUtilities.cs
index 39b1b50..ca15691 100644
--- a/PerpetuumSoft.Knockout/Utilities/KnockoutUtilities.cs
+++ b/PerpetuumSoft.Knockout/Utilities/KnockoutUtilities.cs
@@ -27,6 +27,8 @@ public static void ConvertData(object data)
type = type.BaseType;
foreach (var property in type.GetProperties())
{
+ if (property.GetGetMethod().IsStatic && property.PropertyType == property.DeclaringType)
+ continue;
if (property.GetCustomAttributes(typeof(Newtonsoft.Json.JsonIgnoreAttribute), false).Length > 0)
continue;
if (property.GetGetMethod() == null)