Files
UnrealEngineUWP/Engine/Source/Runtime/WebBrowser/Private/Native/NativeJSStructSerializerBackend.cpp
josh adams 019c12863e - Merging Dev-Kairos/Engine/... to Main/Engine/...
- Brings over the necessary engine changes for embedding UE4 mobile as a dylib/so in native mobile app
- Various changes for facial animation, screen recording, others
- ARKit and ARCore plugins were removed, as deemed "not ready"
#rb many people

#ROBOMERGE-OWNER: ryan.vance
#ROBOMERGE-AUTHOR: josh.adams
#ROBOMERGE-SOURCE: CL 5201138 via CL 5203024 via CL 5226277
#ROBOMERGE-BOT: DEVVR (Main -> Dev-VR)

[CL 5244512 by josh adams in Dev-VR branch]
2019-02-28 17:06:02 -05:00

48 lines
1.7 KiB
C++

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#include "Native/NativeJSStructSerializerBackend.h"
#include "NativeJSScripting.h"
#include "UObject/UnrealType.h"
#include "UObject/PropertyPortFlags.h"
#include "Templates/Casts.h"
void FNativeJSStructSerializerBackend::WriteProperty(const FStructSerializerState& State, int32 ArrayIndex)
{
// The parent class serialzes UObjects as NULLs
if (State.ValueType == UObjectProperty::StaticClass())
{
WriteUObject(State, CastChecked<UObjectProperty>(State.ValueProperty)->GetPropertyValue_InContainer(State.ValueData, ArrayIndex));
}
// basic property type (json serializable)
else
{
FJsonStructSerializerBackend::WriteProperty(State, ArrayIndex);
}
}
void FNativeJSStructSerializerBackend::WriteUObject(const FStructSerializerState& State, UObject* Value)
{
// Note this function uses WriteRawJSONValue to append non-json data to the output stream.
FString RawValue = Scripting->ConvertObject(Value);
if ((State.ValueProperty == nullptr) || (State.ValueProperty->ArrayDim > 1) || (State.ValueProperty->GetOuter()->GetClass() == UArrayProperty::StaticClass()))
{
GetWriter()->WriteRawJSONValue(RawValue);
}
else if (State.KeyProperty != nullptr)
{
FString KeyString;
State.KeyProperty->ExportTextItem(KeyString, State.KeyData, nullptr, nullptr, PPF_None);
GetWriter()->WriteRawJSONValue(KeyString, RawValue);
}
else
{
GetWriter()->WriteRawJSONValue(Scripting->GetBindingName(State.ValueProperty), RawValue);
}
}
FNativeJSStructSerializerBackend::FNativeJSStructSerializerBackend(TSharedRef<class FNativeJSScripting> InScripting, FMemoryWriter& Writer)
: FJsonStructSerializerBackend(Writer, EStructSerializerBackendFlags::Default)
, Scripting(InScripting)
{
}