Browse Source

Quick.Yaml linux compatibility

Unknown 6 năm trước cách đây
mục cha
commit
51724261d7
2 tập tin đã thay đổi với 13 bổ sung2 xóa
  1. 3 2
      Quick.YAML.Serializer.pas
  2. 10 0
      Quick.YAML.pas

+ 3 - 2
Quick.YAML.Serializer.pas

@@ -271,7 +271,8 @@ begin
               propObj := GetValue(PPByte(rValue.GetReferenceToRawData)^ +GetTypeData(aTypeInfo).elSize * i, GetTypeData(aTypeInfo).ElType2).AsObject;
               if propObj = nil then
               begin
-                objClass := GetTypeData(aTypeInfo).ClassType;
+                //objClass := GetTypeData(aTypeInfo).ClassType;
+                objClass := GetTypeData(GetTypeData(aTypeInfo).ElType2).ClassType;
                 rItemValue := DeserializeClass(objClass,yaml);
               end
               else
@@ -404,8 +405,8 @@ begin
   Result := nil;
   if (aYaml = nil) or ((aYaml as TYamlValue) is TYamlNull) or (aYaml.Count = 0) then Exit;
 
-  Result := aType.Create;
   try
+    Result := aType.Create;
     Result := DeserializeObject(Result,aYaml);
   except
     on E : Exception do

+ 10 - 0
Quick.YAML.pas

@@ -496,7 +496,11 @@ begin
   yaml := TList<string>.Create;
   try
     vIndex := 0;
+    {$IFNDEF LINUX}
     for line in aData.Split([#13]) do yaml.Add(StringReplace(line,#10,'',[rfReplaceAll]));
+    {$ELSE}
+    for line in aData.Split([#10]) do yaml.Add(StringReplace(line,#13,'',[rfReplaceAll]));
+    {$ENDIF}
     while yaml.Count > vIndex do
     begin
       yamlvalue := ParseValue(yaml,vIndex);
@@ -518,7 +522,11 @@ begin
   yaml := TList<string>.Create;
   try
     vIndex := 0;
+    {$IFNDEF LINUX}
     for line in aData.Split([#13]) do yaml.Add(StringReplace(line,#10,'',[rfReplaceAll]));
+    {$ELSE}
+    for line in aData.Split([#10]) do yaml.Add(StringReplace(line,#13,'',[rfReplaceAll]));
+    {$ENDIF}
     if yaml[0].TrimLeft.StartsWith('- ') then Result := TYamlArray.Create
       else Result := TYamlObject.Create;
     while yaml.Count > vIndex do
@@ -572,6 +580,8 @@ begin
     indent := StringOfChar(' ',aIndent);
     for member in fMembers do
     begin
+      if member = nil then continue;
+
       yvalue := member.Value;
       if yvalue.IsScalar then
       begin