public ObjectSpecs?GetObjectSpecs(Type objType) { var memberSpecs = new MemberSpecs(objType); memberSpecs.Init(); object?deserializeObj = null; object?serializeObj = null; return(new ObjectSpecs( memberSpecs, (serializer, argList) => { var constructorSpecs = new MethodSpecs(FindConstructor(objType)); constructorSpecs.Init(); deserializeObj = MethodInvoker.InvokeMethod(serializer, constructorSpecs, null, argList); Debug.Assert(deserializeObj != null); return deserializeObj; }, (spec, value) => { memberSpecs.TryGetMember(spec, out var memberInfo); memberInfo.SetValue(deserializeObj, value); }, (_, _) => deserializeObj, (_, obj) => serializeObj = obj, spec => { memberSpecs.TryGetMember(spec, out var memberInfo); return memberInfo.GetValue(serializeObj); }, (_, _) => { })); }
public string SerializeSingleValue(CommandLineSerializer serializer, Type objType, object?obj) { if (obj == null) { throw new ArgumentNullException(nameof(obj)); } var memberSpecs = new MemberSpecs(objType); memberSpecs.Init(); var argList = serializer.Serialize(memberSpecs, spec => { memberSpecs.TryGetMember(spec, out var memberInfo); return(memberInfo.GetValue(obj)); }); return(ImplUtil.MergeCommandLine(argList)); }