前些天在写UnrealAutomator的Web解析模块的时候,遇到了一些USTRUCT方面的问题,由于笔者以前并非UE4程序员,因此踩了一些坑,果断分享一下踩坑历程。
首先聊一下USTRUCT的生成。USTRUCT是UE4的特性之一,从非C++/UE4程序员的角度来讲,USTRUCT、UPROPERTY、GENERATED_BODY之类的概念类似于注释和装饰器的作用,可以在编译等时期将代码标识的内涵纳入自己的Runtime。举一个例子,UnrealAutomator中的UIModel.h:
1 |
|
现在有一个需求,就是把一个以json字符串为body的http request解析成这个USTRUCT,自然而然会需要FJsonObject相关的功能。http request的body原生为TArray<uint8>
的格式,得先转为FString
,然后转为FJsonObject
,之后再转为USTRUCT
1 | // TArray<uint8> to FString |
值得一提的是,json转USTRUCT的过程中,不能通过传空指针USTRUCT的方式企图希望FJsonObjectConverter::JsonObjectToUStruct
能够对USTRUCT进行重赋值。一方面是C++左右值的特性引起的,另一方面在转属性的过程中,也需要读取原来USTRUCT的属性值相关信息,如果传进去的是空指针就会crash。
1 | // 模板json转ustruct函数 |
规避了这些坑,FJsonObject转USTRUCT就顺利了