* ObjectTest.cs:
* LCObjectData.cs: * LCObject.cs: chore: 支持 LCObject 序列化
parent
2266887b9a
commit
385a261388
|
@ -180,5 +180,39 @@ namespace Storage.Test {
|
|||
Assert.NotNull(obj["intList"]);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Serialization() {
|
||||
LCObject obj = new LCObject("Hello");
|
||||
obj["intValue"] = 123;
|
||||
obj["boolValue"] = true;
|
||||
obj["stringValue"] = "hello, world";
|
||||
obj["time"] = DateTime.Now;
|
||||
obj["intList"] = new List<int> { 1, 1, 2, 3, 5, 8 };
|
||||
obj["stringMap"] = new Dictionary<string, object> {
|
||||
{ "k1", 111 },
|
||||
{ "k2", true },
|
||||
{ "k3", "haha" }
|
||||
};
|
||||
LCObject nestedObj = new LCObject("World");
|
||||
nestedObj["content"] = "7788";
|
||||
obj["objectValue"] = nestedObj;
|
||||
obj["pointerList"] = new List<object> {
|
||||
new LCObject("World"),
|
||||
nestedObj
|
||||
};
|
||||
await obj.Save();
|
||||
|
||||
string json = obj.ToString();
|
||||
WriteLine(json);
|
||||
LCObject newObj = LCObject.ParseObject(json);
|
||||
Assert.NotNull(newObj.ObjectId);
|
||||
Assert.NotNull(newObj.ClassName);
|
||||
Assert.NotNull(newObj.CreatedAt);
|
||||
Assert.NotNull(newObj.UpdatedAt);
|
||||
Assert.AreEqual(newObj["intValue"], 123);
|
||||
Assert.AreEqual(newObj["boolValue"], true);
|
||||
Assert.AreEqual(newObj["stringValue"], "hello, world");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,11 +55,17 @@ namespace LeanCloud.Storage.Internal.Object {
|
|||
return null;
|
||||
}
|
||||
Dictionary<string, object> dict = new Dictionary<string, object> {
|
||||
{ "className", objectData.ClassName },
|
||||
{ "objectId", objectData.ObjectId },
|
||||
{ "createdAt", objectData.CreatedAt },
|
||||
{ "updatedAt", objectData.UpdatedAt },
|
||||
{ "className", objectData.ClassName }
|
||||
};
|
||||
if (!string.IsNullOrEmpty(objectData.ObjectId)) {
|
||||
dict["objectId"] = objectData.ObjectId;
|
||||
}
|
||||
if (objectData.CreatedAt != null) {
|
||||
dict["createdAt"] = objectData.CreatedAt;
|
||||
}
|
||||
if (objectData.UpdatedAt != null) {
|
||||
dict["updatedAt"] = objectData.UpdatedAt;
|
||||
}
|
||||
if (objectData.CustomPropertyDict != null) {
|
||||
foreach (KeyValuePair<string, object> kv in objectData.CustomPropertyDict) {
|
||||
string key = kv.Key;
|
||||
|
|
|
@ -3,7 +3,7 @@ using System.Collections;
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.ObjectModel;
|
||||
using Newtonsoft.Json;
|
||||
using LeanCloud.Storage.Internal.Object;
|
||||
using LeanCloud.Storage.Internal.Operation;
|
||||
using LeanCloud.Storage.Internal.Codec;
|
||||
|
@ -457,6 +457,26 @@ namespace LeanCloud.Storage {
|
|||
subclassTypeDict[classType] = subclassInfo;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 序列化为 json 字符串
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override string ToString() {
|
||||
return JsonConvert.SerializeObject(LCObjectData.Encode(data));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 反序列化为 LCObject 对象
|
||||
/// </summary>
|
||||
/// <param name="json"></param>
|
||||
/// <returns></returns>
|
||||
public static LCObject ParseObject(string json) {
|
||||
LCObjectData objectData = LCObjectData.Decode(JsonConvert.DeserializeObject<Dictionary<string, object>>(json));
|
||||
LCObject obj = Create(objectData.ClassName);
|
||||
obj.Merge(objectData);
|
||||
return obj;
|
||||
}
|
||||
|
||||
void ApplyOperation(string key, ILCOperation op) {
|
||||
if (op is LCDeleteOperation) {
|
||||
estimatedData.Remove(key);
|
||||
|
|
Loading…
Reference in New Issue