allow_object_after_value = isXmlWriter;
allow_parallel_values = !isXmlWriter;
allow_empty_member = !isXmlWriter;
+ allow_multiple_results = !isXmlWriter;
}
// configuration
- bool allow_ns_at_value, allow_object_after_value, allow_parallel_values, allow_empty_member;
+ bool allow_ns_at_value, allow_object_after_value, allow_parallel_values, allow_empty_member, allow_multiple_results;
// state
XamlWriteState state = XamlWriteState.Initial;
{
RejectNamespaces (XamlNodeType.EndObject);
CheckState (XamlNodeType.EndObject);
- state = hasMoreNodes ? XamlWriteState.ObjectWritten : XamlWriteState.End;
+ state = hasMoreNodes ? XamlWriteState.ObjectWritten : allow_multiple_results ? XamlWriteState.Initial : XamlWriteState.End;
}
public void GetObject ()
public string FactoryMethod;
public object Value;
+ public object KeyValue;
public List<MemberAndValue> WrittenProperties = new List<MemberAndValue> ();
public bool IsInstantiated;
}
public XamlMember Member;
public object Value;
- public object KeyValue;
public AllowedMemberLocations OccuredAs = AllowedMemberLocations.None;
}
var xm = CurrentMember;
- if (!xm.Type.IsCollection)
- throw new InvalidOperationException (String.Format ("WriteGetObject method can be invoked only when current member '{0}' is of collection type", xm.Name));
-
var state = new ObjectState () {Type = xm.Type, IsGetObject = true};
object_states.Push (state);
protected override void OnWriteGetObject ()
{
- WritePendingStartMember (XamlNodeType.GetObject);
+ if (object_states.Count > 1) {
+ var state = object_states.Pop ();
- // Other than above, nothing to do.
+ if (!CurrentMember.Type.IsCollection)
+ throw new InvalidOperationException (String.Format ("WriteGetObject method can be invoked only when current member '{0}' is of collection type", CurrentMember));
+
+ object_states.Push (state);
+ }
+
+ WritePendingStartMember (XamlNodeType.GetObject);
}
void WritePendingStartMember (XamlNodeType nodeType)