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)