ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

UE4 C++ serialization and deserialization

2021-08-31 21:04:32  阅读:220  来源: 互联网

标签:UPROPERTY bar deserialization JsonData nested C++ UE4 USTRUCT FString


 

对以下 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" 模块。

标签:UPROPERTY,bar,deserialization,JsonData,nested,C++,UE4,USTRUCT,FString
来源: https://www.cnblogs.com/diruizhixia/p/15212127.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有