protected override void OnWriteStartObject() { var state = object_states.Pop(); if (object_states.Count > 0) { var pstate = object_states.Peek(); if (CurrentMemberState.Value != null) { throw WithLineInfo(new XamlDuplicateMemberException(CurrentMember, pstate.Type)); } } else { var obj = source.Settings.RootObjectInstance; if (obj != null) { if (state.Type.UnderlyingType != null && !state.Type.UnderlyingType.GetTypeInfo().IsAssignableFrom(obj.GetType().GetTypeInfo())) { throw WithLineInfo(new XamlObjectWriterException( String.Format("RootObjectInstance type '{0}' is not assignable to '{1}'", obj.GetType(), state.Type))); } state.Value = obj; state.IsInstantiated = true; HandleBeginInit(obj); source.OnBeforeProperties(state.Value); } root_state = state; } object_states.Push(state); if (!state.Type.IsContentValue(service_provider)) { InitializeObjectIfRequired(true); } state.IsXamlWriterCreated = true; }