public override void BSerialize(BinaryWriter writer, FPackageFileSummary summary) { if (Struct.GetType().IsArray) { object[] array = Struct as object[]; foreach (object obj in array) { IStructObject structObject = obj as IStructObject; if (structObject != null) { BSerializer.Serialize(writer, structObject.GetType(), structObject); } else { (obj as UObject)?.BSerialize(writer, summary); } } } else if (Struct is IStructObject) { BSerializer.Serialize(writer, Struct.GetType(), Struct); } else { (Struct as UObject)?.BSerialize(writer, summary); } }
private void SingleStruct(object data, FPackageFileSummary summary) { IStructObject structObject = Struct as IStructObject; if (structObject != null) { Struct = JsonConvert.DeserializeObject(data.ToString(), Struct.GetType()); base.Size = structObject.GetSize(); return; } UObject uObject = Struct as UObject; if (uObject == null || !UAsset.Options.ForceArrays) { return; } if (UAsset.Options.Verbose) { Console.WriteLine($"Forcing Struct {base.Name?.Name} -> {StructName} update as a single UObject, integrity warning!"); } JObject jObject = JObject.Parse(data.ToString()); List <KeyValuePair <string, object> > list = new List <KeyValuePair <string, object> >(jObject.Count); foreach (JProperty item in jObject.Properties()) { list.Add(new KeyValuePair <string, object>(item.Name, item.Value)); } for (int i = 0; i < uObject.Count; i++) { uObject[i].UpdateFromJSON(list[i].Value, summary); } base.Size += uObject.GetSize(); }
public static object Unwrap(object x) { object[] array = x as object[]; if (array != null) { return(array.Select(Unwrap).ToArray()); } UObject uObject = x as UObject; if (uObject != null) { return(uObject.ToDictionary(inStruct: true)); } IStructObject structObject = x as IStructObject; if (structObject != null) { return(structObject.Serialize()); } FName fName = x as FName; if (fName != null) { return(fName.GetValue()); } FPropertyTag fPropertyTag = x as FPropertyTag; if (fPropertyTag != null) { return(fPropertyTag.GetValue()); } Tuple <FPropertyTag, FPropertyTag> tuple = x as Tuple <FPropertyTag, FPropertyTag>; if (tuple != null) { return(new object[2] { tuple.Item1.GetValue(), tuple.Item2.GetValue() }); } return(x); }