NativeInterfaceJSStructSerializerBackend.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Engine/Source/Runtime/WebBrowser/Private/Native/NativeJSStructSerializerBackend.cpp
  2. #include "Native/NativeInterfaceJSStructSerializerBackend.h"
  3. #include "NativeInterfaceJSScripting.h"
  4. #include "UObject/UnrealType.h"
  5. #include "UObject/PropertyPortFlags.h"
  6. #include "Templates/Casts.h"
  7. void FNativeInterfaceJSStructSerializerBackend::WriteProperty(const FStructSerializerState& State, int32 ArrayIndex)
  8. {
  9. // The parent class serialzes UObjects as NULLs
  10. if (FObjectProperty* ObjectProperty = CastField<FObjectProperty>(State.ValueProperty))
  11. {
  12. WriteUObject(State, CastFieldChecked<FObjectProperty>(State.ValueProperty)->GetPropertyValue_InContainer(State.ValueData, ArrayIndex));
  13. }
  14. // basic property type (json serializable)
  15. else
  16. {
  17. FJsonStructSerializerBackend::WriteProperty(State, ArrayIndex);
  18. }
  19. }
  20. void FNativeInterfaceJSStructSerializerBackend::WriteUObject(const FStructSerializerState& State, UObject* Value)
  21. {
  22. // Note this function uses WriteRawJSONValue to append non-json data to the output stream.
  23. FString RawValue = Scripting->ConvertObject(Value);
  24. if ((State.ValueProperty == nullptr) || (State.ValueProperty->ArrayDim > 1) || State.ValueProperty->GetOwner< FArrayProperty>())
  25. {
  26. GetWriter()->WriteRawJSONValue(RawValue);
  27. }
  28. else if (State.KeyProperty != nullptr)
  29. {
  30. FString KeyString;
  31. State.KeyProperty->ExportTextItem_Direct(KeyString, State.KeyData, nullptr, nullptr, PPF_None);
  32. GetWriter()->WriteRawJSONValue(KeyString, RawValue);
  33. }
  34. else
  35. {
  36. GetWriter()->WriteRawJSONValue(Scripting->GetBindingName(State.ValueProperty), RawValue);
  37. }
  38. }
  39. FNativeInterfaceJSStructSerializerBackend::FNativeInterfaceJSStructSerializerBackend(TSharedRef<class FNativeInterfaceJSScripting> InScripting, FMemoryWriter& Writer)
  40. : FJsonStructSerializerBackend(Writer, EStructSerializerBackendFlags::Default)
  41. , Scripting(InScripting)
  42. {
  43. }