我使用的是 UE 5.3。 我有一个名为“issuetype”的 UPROPERTY 变量。当使用 FJsonObjectConverter::UStructToJsonObject 进行序列化时,它会生成“issueType”。它仅在打包构建中执行此操作,而不是在 PIE 中运行时执行此操作。
查看FJsonObjectConverter::StandardizeCase,它只使第一个字符或“ID”中的“d”小写,所以我无法弄清楚为什么它在issuetype中将T大写,更不用说为什么它只这样做了在打包构建上而不是 PIE 上。如果它以某种方式识别复合词,那么我正在使用其他复合词,但它没有这样做,例如“customfield”
这是我的代码:
结构:
USTRUCT()
struct FMyIssue
{
GENERATED_BODY()
public:
FMyIssue() = default;
UPROPERTY()
TMap<FString, FString> issuetype = {{TEXT("name"), TEXT(" ") }};
}
.cpp
TSharedPtr<FMyStruct> myStruct = MakeShared<FMyStruct>();
TSharedPtr<FJsonObject> jsonObject = FJsonObjectConverter::UStructToJsonObject(*myStruct);
FString serializedSelf;
const TSharedRef<TJsonWriter<>> jsonWriter = TJsonWriterFactory<>::Create(&serializedSelf);
FJsonSerializer::Serialize(jsonObject .ToSharedRef(), jsonWriter)
const FString fileLocation = TEXT("path/to/file");
FFileHelper::SaveStringToFile(serializedSelf, *fileLocation)
输出:
{
"issueType":
{
"name": " "
},
}
我正在从名为 IssueType 的配置 ini 键中提取值。我将问题类型的每个实例都设置为小写,这解决了问题。我不明白如何或为什么,但它确实如此。
.ini 小写之前
[IssueType]
IssueType = myissue
cpp
_issuetype = GConfig->GetStr(TEXT("IssueType"), TEXT("IssueType"), configFile);
myIssue->issuetype[TEXT("name")] = GetDefault<UMySettings>()->_issuetype;