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;
}