UE4 C++ serialization and deserialization

2021/8/31 22:36:27

本文主要是介绍UE4 C++ serialization and deserialization,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

对以下 JSON 文件进行读写操作(序列化与反序列化)。

 

Json代码  收藏代码
  1. {  
  2.     "nested":  
  3.     {  
  4.         "id": "i am nested id",  
  5.         "name": "this is the nested name"  
  6.     },  
  7.     "foo": "i am test foo",  
  8.     "bar_arr": [  
  9.         {  
  10.             "barfoo": "i am barfoo test"  
  11.         }  
  12.     ]  
  13. }  

 

定义好反序列化的文件对象结构:

 

Java代码  收藏代码
  1. USTRUCT()  
  2. struct FNested  
  3. {  
  4.     GENERATED_USTRUCT_BODY()  
  5.   
  6.     UPROPERTY()  
  7.     FString id;  
  8.   
  9.     UPROPERTY()  
  10.     FString name;  
  11. };  
  12.   
  13. USTRUCT()  
  14. struct FBar  
  15. {  
  16.     GENERATED_USTRUCT_BODY()  
  17.   
  18.     UPROPERTY()  
  19.     FString barfoo;  
  20. };  
  21.   
  22. USTRUCT()  
  23. struct FJsonData  
  24. {  
  25.     GENERATED_USTRUCT_BODY()  
  26.   
  27.     UPROPERTY()  
  28.     FNested nested;  
  29.   
  30.     UPROPERTY()  
  31.     FString foo;  
  32.   
  33.     UPROPERTY()  
  34.     TArray<FBar> bar_arr;  
  35.   
  36.     //Transient 会阻止该属性被序列化  
  37.     UPROPERTY(Transient)  
  38.     FString PropertyToIgnore;  
  39. };  

 

读写操作:

Java代码  收藏代码
  1. void UJsonSerializeComponent::Read()   
  2. {  
  3.     FString FilePath = "F:\\svn-master\\thirdparty-master\\JsonSerializeSample\\Content\\test.json";  
  4.     FString FileData = "";  
  5.     if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*FilePath))  
  6.     {  
  7.         UE_LOG(LogTemp, Warning, TEXT("DID NOT FIND FILE"));  
  8.         return;  
  9.     }  
  10.   
  11.     FJsonData JsonData;  
  12.     FFileHelper::LoadFileToString(FileData, *FilePath);  
  13.   
  14.     UE_LOG(LogTemp, Warning, TEXT("%s"), *FileData);  
  15.   
  16.     if (FJsonObjectConverter::JsonObjectStringToUStruct(FileData, &JsonData, 0, 0))  
  17.     {  
  18.         UE_LOG(LogTemp, Warning, TEXT("CONVERTED"));  
  19.         UE_LOG(LogTemp, Warning, TEXT("NestedName: %s "), *JsonData.nested.name);  
  20.     }  
  21. }  
  22.   
  23. void UJsonSerializeComponent::Write()   
  24. {  
  25.     FJsonData JsonData;  
  26.     JsonData.nested.id = "i am nested id2";  
  27.     JsonData.nested.name = "this is the nested name2";  
  28.     JsonData.foo = "i am test foo2";  
  29.     FBar bar;  
  30.     bar.barfoo = "i am barfoo test2";  
  31.     JsonData.bar_arr.Add(bar);  
  32.   
  33.     FString JsonString;  
  34.     FJsonObjectConverter::UStructToJsonObjectString(JsonData, JsonString);  
  35.   
  36.     //save to file  
  37.     FFileHelper::SaveStringToFile(JsonString, *FString("F:\\svn-master\\thirdparty-master\\JsonSerializeSample\\Content\\test.json"));  
  38. }  

 

记得要在 PublicDependencyModuleNames 中加入 "Json" 和  "JsonUtilities" 模块。



这篇关于UE4 C++ serialization and deserialization的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程