예제 #1
0
 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);
     }
 }
예제 #2
0
        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();
        }
예제 #3
0
        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);
        }