public static bool IsSimillar(CItem itemA, CItem itemB) { if (itemA.GetType() != itemB.GetType()) { return(false); } FieldInfo[] propertiesA = itemA.GetType().GetFields(); // @todo dodać filtr żeby zwracał tylko pola przedmiotu a nie wszystkie FieldInfo[] propertiesB = itemB.GetType().GetFields(); object objA, objB; foreach (FieldInfo fieldA in propertiesA) { foreach (FieldInfo fieldB in propertiesB) { if (fieldA.Name == fieldB.Name) { objA = fieldA.GetValue(itemA); objB = fieldB.GetValue(itemB); if (objA != null && objB != null) { if (!objA.Equals(objB)) { return(false); } } break; } } } return(true); }
public string ToJson(bool skipDefault = true) { CItem original = Globals.Managers.item.GetItemByID(id, true); JObject jsonObject = new JObject(); if (skipDefault) { jsonObject["id"] = id; FieldInfo[] propertiesA = original.GetType().GetFields(); // @todo dodać filtr żeby zwracał tylko pola przedmiotu a nie wszystkie FieldInfo[] propertiesB = this.GetType().GetFields(); object objA, objB; foreach (FieldInfo field in propertiesA) { objA = field.GetValue(original); objB = field.GetValue(this); if (objA != null && objB != null) { if (!objA.Equals(objB) || field.Name == "position") { jsonObject[field.Name] = JsonConvert.SerializeObject(objB); } } } } else { FieldInfo[] properties = GetType().GetFields(); foreach (FieldInfo field in properties) { jsonObject[field.Name] = JsonConvert.SerializeObject(field.GetValue(this)); } } return(jsonObject.ToString(Formatting.None)); }