UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
JsonStructSerializerBackend.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "CoreMinimal.h"
7#include "CoreTypes.h"
13#include "UObject/UnrealType.h"
14
15class FArchive;
16
27{
28public:
29
36 UE_DEPRECATED(4.22, "Use the two-parameter constructor with EStructSerializerBackendFlags::Legacy only if you need backwards compatibility with code compiled prior to 4.22; otherwise use EStructSerializerBackendFlags::Default.")
41
52
53public:
54
55 // IStructSerializerBackend interface
56
57 SERIALIZATION_API virtual void BeginArray(const FStructSerializerState& State) override;
58 SERIALIZATION_API virtual void BeginStructure(const FStructSerializerState& State) override;
59 SERIALIZATION_API virtual void EndArray(const FStructSerializerState& State) override;
60 SERIALIZATION_API virtual void EndStructure(const FStructSerializerState& State) override;
61 SERIALIZATION_API virtual void WriteComment(const FString& Comment) override;
62 SERIALIZATION_API virtual void WriteProperty(const FStructSerializerState& State, int32 ArrayIndex = 0) override;
63 SERIALIZATION_API virtual bool WritePODArray(const FStructSerializerState& State) override;
64
65protected:
66
67 // Allow access to the internal JsonWriter to subclasses
69 {
70 return JsonWriter;
71 }
72
73 // Writes a property value to the serialization output.
74 template<typename ValueType>
75 void WritePropertyValue(const FStructSerializerState& State, const ValueType& Value)
76 {
77 //Write only value in case of no property or container elements
78 if ((State.ValueProperty == nullptr) ||
79 ((State.ValueProperty->ArrayDim > 1
80 || State.ValueProperty->GetOwner<FArrayProperty>()
81 || State.ValueProperty->GetOwner<FSetProperty>()
82 || (State.ValueProperty->GetOwner<FMapProperty>() && State.KeyProperty == nullptr)) && !EnumHasAnyFlags(State.StateFlags, EStructSerializerStateFlags::WritingContainerElement)))
83 {
84 JsonWriter->WriteValue(Value);
85 }
86 //Write Key:Value in case of a map entry
87 else if (State.KeyProperty != nullptr)
88 {
89 FString KeyString;
90 State.KeyProperty->ExportTextItem_Direct(KeyString, State.KeyData, nullptr, nullptr, PPF_None);
91 JsonWriter->WriteValue(KeyString, Value);
92 }
93 //Write PropertyName:Value for any other cases (single array element, single property, etc...)
94 else
95 {
96 JsonWriter->WriteValue(State.ValueProperty->GetName(), Value);
97 }
98 }
99
100 // Writes a null value to the serialization output.
102 {
103 if ((State.ValueProperty == nullptr) ||
104 ((State.ValueProperty->ArrayDim > 1
105 || State.ValueProperty->GetOwner<FArrayProperty>()
106 || State.ValueProperty->GetOwner<FSetProperty>()
107 || (State.ValueProperty->GetOwner<FMapProperty>() && State.KeyProperty == nullptr)) && !EnumHasAnyFlags(State.StateFlags, EStructSerializerStateFlags::WritingContainerElement)))
108 {
109 JsonWriter->WriteNull();
110 }
111 else if (State.KeyProperty != nullptr)
112 {
113 FString KeyString;
114 State.KeyProperty->ExportTextItem_Direct(KeyString, State.KeyData, nullptr, nullptr, PPF_None);
115 JsonWriter->WriteNull(KeyString);
116 }
117 else
118 {
119 JsonWriter->WriteNull(State.ValueProperty->GetName());
120 }
121 }
122
123private:
124
127
130};
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::CHAR16 UCS2CHAR
A 16-bit character containing a UCS2 (Unicode, 16-bit, fixed-width) code unit, used for compatibility...
Definition Platform.h:1139
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
EStructSerializerBackendFlags
Definition IStructSerializerBackend.h:14
@ PPF_None
Definition PropertyPortFlags.h:15
Definition Archive.h:1208
Definition UnrealType.h:3702
Definition JsonStructSerializerBackend.h:27
FJsonStructSerializerBackend(FArchive &InArchive, const EStructSerializerBackendFlags InFlags)
Definition JsonStructSerializerBackend.h:48
virtual SERIALIZATION_API void WriteProperty(const FStructSerializerState &State, int32 ArrayIndex=0) override
Definition JsonStructSerializerBackend.cpp:81
virtual SERIALIZATION_API bool WritePODArray(const FStructSerializerState &State) override
Definition JsonStructSerializerBackend.cpp:208
virtual SERIALIZATION_API void BeginArray(const FStructSerializerState &State) override
Definition JsonStructSerializerBackend.cpp:14
virtual SERIALIZATION_API void EndStructure(const FStructSerializerState &State) override
Definition JsonStructSerializerBackend.cpp:69
virtual SERIALIZATION_API void EndArray(const FStructSerializerState &State) override
Definition JsonStructSerializerBackend.cpp:63
virtual SERIALIZATION_API void BeginStructure(const FStructSerializerState &State) override
Definition JsonStructSerializerBackend.cpp:33
virtual SERIALIZATION_API void WriteComment(const FString &Comment) override
Definition JsonStructSerializerBackend.cpp:75
void WritePropertyValue(const FStructSerializerState &State, const ValueType &Value)
Definition JsonStructSerializerBackend.h:75
void WriteNull(const FStructSerializerState &State)
Definition JsonStructSerializerBackend.h:101
TSharedRef< TJsonWriter< UCS2CHAR > > & GetWriter()
Definition JsonStructSerializerBackend.h:68
Definition UnrealType.h:3843
Definition UnrealType.h:4028
Definition IStructSerializerBackend.h:125
Definition JsonWriter.h:85
void WriteValue(uint8 Value)
Definition JsonWriter.h:201
void WriteNull(IdentifierType &&Identifier)
Definition JsonWriter.h:332
Definition SharedPointer.h:153
Definition IStructSerializerBackend.h:81