UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
JsonArchiveInputFormatter.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Map.h"
8#include "CoreMinimal.h"
9#include "HAL/Platform.h"
12#include "Templates/Function.h"
15
16class FArchive;
17class FJsonObject;
18class FJsonValue;
19class FName;
20class FPackageIndex;
21class FText;
22class UObject;
23struct FLazyObjectPtr;
24struct FObjectPtr;
25struct FSoftObjectPath;
26struct FSoftObjectPtr;
27struct FWeakObjectPtr;
28
29#if WITH_TEXT_ARCHIVE_SUPPORT
30
31class FJsonArchiveInputFormatter final : public FStructuredArchiveFormatter
32{
33public:
34 // Noncopyable
35 FJsonArchiveInputFormatter(FJsonArchiveInputFormatter&&) = delete;
36 FJsonArchiveInputFormatter(const FJsonArchiveInputFormatter&) = delete;
37 FJsonArchiveInputFormatter& operator=(FJsonArchiveInputFormatter&&) = delete;
38 FJsonArchiveInputFormatter& operator=(const FJsonArchiveInputFormatter&) = delete;
39
40 COREUOBJECT_API explicit FJsonArchiveInputFormatter(FArchive& InInner, TFunction<UObject* (const FPackageIndex)> InResolveObject = nullptr);
42
45
46 COREUOBJECT_API virtual bool HasDocumentTree() const override;
47
48 COREUOBJECT_API virtual void EnterRecord() override;
49 COREUOBJECT_API virtual void LeaveRecord() override;
50 COREUOBJECT_API virtual void EnterField(FArchiveFieldName Name) override;
51 COREUOBJECT_API virtual void LeaveField() override;
53
54 COREUOBJECT_API virtual void EnterArray(int32& NumElements) override;
55 COREUOBJECT_API virtual void LeaveArray() override;
56 COREUOBJECT_API virtual void EnterArrayElement() override;
57 COREUOBJECT_API virtual void LeaveArrayElement() override;
58
59 COREUOBJECT_API virtual void EnterStream() override;
60 COREUOBJECT_API virtual void LeaveStream() override;
61 COREUOBJECT_API virtual void EnterStreamElement() override;
62 COREUOBJECT_API virtual void LeaveStreamElement() override;
63
64 COREUOBJECT_API virtual void EnterMap(int32& NumElements) override;
65 COREUOBJECT_API virtual void LeaveMap() override;
66 COREUOBJECT_API virtual void EnterMapElement(FString& Name) override;
67 COREUOBJECT_API virtual void LeaveMapElement() override;
68
69 COREUOBJECT_API virtual void EnterAttributedValue() override;
70 COREUOBJECT_API virtual void EnterAttribute(FArchiveFieldName AttributeName) override;
71 COREUOBJECT_API virtual void EnterAttributedValueValue() override;
72 COREUOBJECT_API virtual void LeaveAttribute() override;
73 COREUOBJECT_API virtual void LeaveAttributedValue() override;
74 COREUOBJECT_API virtual bool TryEnterAttribute(FArchiveFieldName AttributeName, bool bEnterWhenSavin) override;
75 COREUOBJECT_API virtual bool TryEnterAttributedValueValue() override;
76
77 COREUOBJECT_API virtual void Serialize(uint8& Value) override;
78 COREUOBJECT_API virtual void Serialize(uint16& Value) override;
79 COREUOBJECT_API virtual void Serialize(uint32& Value) override;
80 COREUOBJECT_API virtual void Serialize(uint64& Value) override;
81 COREUOBJECT_API virtual void Serialize(int8& Value) override;
82 COREUOBJECT_API virtual void Serialize(int16& Value) override;
83 COREUOBJECT_API virtual void Serialize(int32& Value) override;
84 COREUOBJECT_API virtual void Serialize(int64& Value) override;
85 COREUOBJECT_API virtual void Serialize(float& Value) override;
86 COREUOBJECT_API virtual void Serialize(double& Value) override;
87 COREUOBJECT_API virtual void Serialize(bool& Value) override;
88 COREUOBJECT_API virtual void Serialize(UTF32CHAR& Value) override;
89 COREUOBJECT_API virtual void Serialize(FString& Value) override;
90 COREUOBJECT_API virtual void Serialize(FName& Value) override;
91 COREUOBJECT_API virtual void Serialize(UObject*& Value) override;
92#if WITH_VERSE_VM || defined(__INTELLISENSE__)
93 COREUOBJECT_API virtual void Serialize(Verse::VCell*& Value) override;
94#endif
95 COREUOBJECT_API virtual void Serialize(FText& Value) override;
96 COREUOBJECT_API virtual void Serialize(FWeakObjectPtr& Value) override;
97 COREUOBJECT_API virtual void Serialize(FSoftObjectPtr& Value) override;
98 COREUOBJECT_API virtual void Serialize(FSoftObjectPath& Value) override;
99 COREUOBJECT_API virtual void Serialize(FLazyObjectPtr& Value) override;
100 COREUOBJECT_API virtual void Serialize(FObjectPtr& Value) override;
101 COREUOBJECT_API virtual void Serialize(TArray<uint8>& Value) override;
102 COREUOBJECT_API virtual void Serialize(void* Data, uint64 DataSize) override;
103
104#if WITH_VERSE_VM || defined(__INTELLISENSE__)
106#endif
107
108private:
110
111 // Used for the subtree parser
112 FJsonArchiveInputFormatter(FArchive& InInner, TFunction<UObject* (const FPackageIndex)>&& InResolveObject, TSharedPtr<FJsonValue>&& RootObject);
113
114 struct FObjectRecord
115 {
117 : JsonObject(InJsonObject)
119 {
120
121 }
122
123 TSharedPtr<FJsonObject> JsonObject;
124 int64 ValueCountOnCreation; // For debugging purposes, so we can ensure all values have been consumed
125 };
126
127 TFunction<UObject* (const FPackageIndex)> ResolveObject;
128#if WITH_VERSE_VM || defined(__INTELLISENSE__)
129 TFunction<Verse::VCell* (const FPackageIndex)> ResolveCell;
130#endif
135
136 static FString EscapeFieldName(const TCHAR* Name);
137 static FString UnescapeFieldName(const TCHAR* Name);
138
140};
141
142#endif
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
FPlatformTypes::UTF32CHAR UTF32CHAR
A 32-bit character containing a UTF32 (Unicode, 32-bit, fixed-width) code unit.
Definition Platform.h:1143
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EArchiveValueType
Definition StructuredArchiveFormatter.h:20
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition JsonObject.h:23
Definition JsonValue.h:22
Definition NameTypes.h:617
Definition ObjectResource.h:44
Definition StructuredArchiveFormatter.h:60
virtual void LeaveArrayElement()=0
virtual void EnterArrayElement()=0
virtual void EnterAttribute(FArchiveFieldName AttributeName)=0
virtual bool TryEnterAttributedValueValue()=0
virtual void LeaveRecord()=0
virtual void EnterMap(int32 &NumElements)=0
virtual void LeaveAttribute()=0
virtual FArchive & GetUnderlyingArchive()=0
virtual void EnterStreamElement()=0
virtual void EnterField(FArchiveFieldName Name)=0
virtual void LeaveStream()=0
virtual FStructuredArchiveFormatter * CreateSubtreeReader()
Definition StructuredArchiveFormatter.h:65
virtual void LeaveMapElement()=0
virtual bool TryEnterField(FArchiveFieldName Name, bool bEnterWhenWriting)=0
virtual void EnterMapElement(FString &Name)=0
virtual bool TryEnterAttribute(FArchiveFieldName AttributeName, bool bEnterWhenWriting)=0
virtual bool HasDocumentTree() const =0
virtual void LeaveArray()=0
virtual void EnterAttributedValue()=0
virtual void LeaveStreamElement()=0
virtual void EnterArray(int32 &NumElements)=0
virtual void LeaveAttributedValue()=0
virtual void EnterStream()=0
virtual void EnterAttributedValueValue()=0
virtual void LeaveField()=0
virtual void LeaveMap()=0
virtual void EnterRecord()=0
Definition Text.h:385
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition Array.h:64
Definition SharedPointer.h:692
Definition Object.h:95
UStruct * GetValueType(const FStructSerializerState &State)
Definition StructSerializer.cpp:254
Definition StructuredArchiveNameHelpers.h:10
Definition LazyObjectPtr.h:151
Definition ObjectPtr.h:55
Definition SoftObjectPath.h:56
Definition SoftObjectPtr.h:45
Definition WeakObjectPtr.h:49