diff --git a/Common/Common-Unity/Common-Unity.csproj b/Common/Common-Unity/Common-Unity.csproj
index 63689bf..c8928d6 100644
--- a/Common/Common-Unity/Common-Unity.csproj
+++ b/Common/Common-Unity/Common-Unity.csproj
@@ -27,6 +27,9 @@
Task\LCTaskExtensions.cs
+
+ Json\LCJsonConverter.cs
+
diff --git a/Common/Common/Common.csproj b/Common/Common/Common.csproj
index 6c06788..dc91fba 100644
--- a/Common/Common/Common.csproj
+++ b/Common/Common/Common.csproj
@@ -3,7 +3,7 @@
netstandard2.0
0.1.0
- LeanCloud.Common
+ Common
diff --git a/Storage/Storage/Internal/Http/LCJsonConverter.cs b/Common/Common/Json/LCJsonConverter.cs
similarity index 91%
rename from Storage/Storage/Internal/Http/LCJsonConverter.cs
rename to Common/Common/Json/LCJsonConverter.cs
index d79bd9d..3e78108 100644
--- a/Storage/Storage/Internal/Http/LCJsonConverter.cs
+++ b/Common/Common/Json/LCJsonConverter.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using Newtonsoft.Json;
-namespace LeanCloud.Storage.Internal {
+namespace LeanCloud.Common {
public class LCJsonConverter : JsonConverter {
public override bool CanConvert(Type objectType) {
return objectType == typeof(object);
@@ -31,5 +31,7 @@ namespace LeanCloud.Storage.Internal {
return serializer.Deserialize(reader);
}
+
+ public readonly static LCJsonConverter Default = new LCJsonConverter();
}
}
diff --git a/LiveQuery/LiveQuery-Unity/LiveQuery-Unity.csproj b/LiveQuery/LiveQuery-Unity/LiveQuery-Unity.csproj
new file mode 100644
index 0000000..05fe632
--- /dev/null
+++ b/LiveQuery/LiveQuery-Unity/LiveQuery-Unity.csproj
@@ -0,0 +1,29 @@
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+ Internal\LCLiveQueryHeartBeat.cs
+
+
+ Internal\LCLiveQueryConnection.cs
+
+
+ LCLiveQuery.cs
+
+
+ LCQueryExtension.cs
+
+
+
+
+ ..\..\UnityLibs\Newtonsoft.Json.dll
+
+
+
diff --git a/LiveQuery/LiveQuery.Test/LiveQuery.Test.csproj b/LiveQuery/LiveQuery.Test/LiveQuery.Test.csproj
new file mode 100644
index 0000000..70a5ff8
--- /dev/null
+++ b/LiveQuery/LiveQuery.Test/LiveQuery.Test.csproj
@@ -0,0 +1,19 @@
+
+
+
+ netcoreapp2.2
+
+ false
+ 0.1.0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LiveQuery/LiveQuery.Test/LiveQuery.cs b/LiveQuery/LiveQuery.Test/LiveQuery.cs
new file mode 100644
index 0000000..9689daf
--- /dev/null
+++ b/LiveQuery/LiveQuery.Test/LiveQuery.cs
@@ -0,0 +1,180 @@
+using NUnit.Framework;
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using System.Net.Http;
+using System.Net.Http.Headers;
+using Newtonsoft.Json;
+using LeanCloud;
+using LeanCloud.Storage;
+using LeanCloud.LiveQuery;
+
+using static NUnit.Framework.TestContext;
+
+namespace LiveQuery.Test {
+ internal class Account : LCObject {
+ internal int Balance {
+ get {
+ return (int)this["balance"];
+ }
+ set {
+ this["balance"] = value;
+ }
+ }
+
+ internal Account() : base("Account") { }
+ }
+
+ public class LiveQuery {
+ private LCLiveQuery liveQuery;
+
+ private Account account;
+
+ [SetUp]
+ public async Task Setup() {
+ LCLogger.LogDelegate += Print;
+ LCApplication.Initialize("ikGGdRE2YcVOemAaRbgp1xGJ-gzGzoHsz",
+ "NUKmuRbdAhg1vrb2wexYo1jo",
+ "https://ikggdre2.lc-cn-n1-shared.com");
+
+ LCObject.RegisterSubclass("Account", () => new Account());
+
+ LCQuery query = new LCQuery("Account");
+ query.WhereGreaterThan("balance", 100);
+ liveQuery = await query.Subscribe();
+ }
+
+ [TearDown]
+ public void TearDown() {
+ LCLogger.LogDelegate -= Print;
+ }
+
+ [Test]
+ [Order(0)]
+ public async Task Create() {
+ TaskCompletionSource