Export (0) Print
Expand All

XamlObjectWriter Class

Creates an object graph from a source XAML node stream.

System.Object
  System.Xaml.XamlWriter
    System.Xaml.XamlObjectWriter

Namespace:  System.Xaml
Assembly:  System.Xaml (in System.Xaml.dll)

public class XamlObjectWriter : XamlWriter, 
	IXamlLineInfoConsumer

The XamlObjectWriter type exposes the following members.

  NameDescription
Public methodXamlObjectWriter(XamlSchemaContext)Initializes a new instance of the XamlObjectWriter class using the XAML schema context that is used by a XamlReader.
Public methodXamlObjectWriter(XamlSchemaContext, XamlObjectWriterSettings)Initializes a new instance of the XamlObjectWriter class using the context that is used by a XamlReader and its settings.
Top

  NameDescription
Protected propertyIsDisposedGets whether Dispose has been called. (Inherited from XamlWriter.)
Public propertyResultGets the last object that was written. Typically only called when the node stream is at its end and the object graph is complete.
Public propertyRootNameScopeGets the INameScope service that maintains the XAML namescope for the absolute node root of the XAML object writer.
Public propertySchemaContextGets the active XAML schema context. (Overrides XamlWriter.SchemaContext.)
Public propertyShouldProvideLineInfoGets a value that reports whether a line information service should provide values and therefore, should also call the SetLineInfo method when it is relevant.
Top

  NameDescription
Public methodClearResets all possible frames and clears the object graph.
Public methodCloseCloses the XAML writer object. (Inherited from XamlWriter.)
Protected methodDisposeReleases the unmanaged resources used by the XamlObjectWriter, and optionally, releases the managed resources. (Overrides XamlWriter.Dispose(Boolean).)
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Protected methodOnAfterBeginInitInvokes any AfterBeginInitHandler method that is associated with XamlObjectWriterSettings for this XamlObjectWriter.
Protected methodOnAfterEndInitInvokes any AfterEndInitHandler method that is associated with XamlObjectWriterSettings for this XamlObjectWriter.
Protected methodOnAfterPropertiesInvokes any AfterPropertiesHandler referenced method that is associated with XamlObjectWriterSettings for this XamlObjectWriter.
Protected methodOnBeforePropertiesInvokes any BeforePropertiesHandler referenced method that is associated with XamlObjectWriterSettings for this XamlObjectWriter.
Protected methodOnSetValueInvokes any XamlSetValueHandler referenced method that is associated with XamlObjectWriterSettings for this writer, as long as handled in XamlSetValueEventArgs event data is not true.
Public methodSetLineInfoImplements IXamlLineInfoConsumer.SetLineInfo and provides line information for exceptions.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Public methodWriteEndMemberCloses the current member scope, and may write the value of the member scope while it closes. The new scope becomes the parent object scope of the member. (Overrides XamlWriter.WriteEndMember().)
Public methodWriteEndObjectCloses the current object scope in the writer. The new object scope becomes the parent member scope. (Overrides XamlWriter.WriteEndObject().)
Public methodWriteGetObjectWrites the conceptual StartObject into the object graph when the specified object is a default or implicit value of the parent property. The implicit value comes from information that is obtained from the XAML schema context and backing type information, instead of being specified as an object value in the input XAML node set. (Overrides XamlWriter.WriteGetObject().)
Public methodWriteNamespaceDefines a namespace declaration that applies to the next object scope or member scope. (Overrides XamlWriter.WriteNamespace(NamespaceDeclaration).)
Public methodWriteNodePerforms switching based on node type from the XAML reader (XamlReader.NodeType) and calls the relevant Write method for the writer implementation. (Inherited from XamlWriter.)
Public methodWriteStartMemberWrites a new member node into the current object scope, and the scope becomes a new member scope. (Overrides XamlWriter.WriteStartMember(XamlMember).)
Public methodWriteStartObjectWrites an object node into the current scope, and sets the scope to a new object scope. (Overrides XamlWriter.WriteStartObject(XamlType).)
Public methodWriteValueWrites a value to the current member scope. If the current scope is inside a collection, dictionary, or array object, the value should be added to the collection, dictionary, or array. (Overrides XamlWriter.WriteValue(Object).)
Top

  NameDescription
Explicit interface implemetationPrivate methodIDisposable.DisposeInfrastructure. See Dispose. (Inherited from XamlWriter.)
Top

The Write methods of XamlObjectWriter implement a pattern so that the XamlObjectWriter uses the XamlWriter that is defined by the WriteNode method. WriteNode logic switches between the Write methods, depending on which node type is at the current position in the reader.

Scope

A XamlObjectWriter has a concept of scope; that is, the XamlObjectWriter maintains a conceptual point of reference in its output object graph. For a particular scope, certain operations might be valid or invalid, or produce a no-operation result. For example, if you call WriteStartMember to write directives for initialization on an object that already exists as an instance, the default implementation throws an exception.

A possible technique for tracking scope in a custom XamlObjectWriter is to align the node actions with a stack or frame class. The stack or frame can keep track of push and pop for each level of object-model depth that is entered or exited while the XamlObjectWriter writes the object graph.

Callbacks

To support intermediate and advanced XamlObjectWriter scenarios, the mechanism of writing an object graph provides callback entry points that occur when a XamlObjectWriter commits or is about to commit certain actions. Some callbacks are enabled in the settings and are not specific to the object type or the member being written; however, callback information is often available in context or is in the event data that is sent through the callback. The following is a list of relevant callbacks:

  • The callback that is declared by AfterBeginInitHandler is invoked when the scope goes to a new object and at the BeginInit phase of object lifetime for each created object.

  • The callback that is declared by AfterEndInitHandler is invoked when the scope goes to a new object and at the EndInit phase of object lifetime for each created object.

  • The callback that is declared by BeforePropertiesHandler is invoked when the scope starts in an object, and occurs when the first WriteStartMember call to that object scope is made but not yet committed.

  • The callback that is declared by AfterPropertiesHandler is invoked when the scope starts in an object, and happens when the WriteEndObject call to that object scope is made but not yet committed.

  • The callback that is declared by XamlSetValueHandler is invoked when OnSetValue is called.

Writing Dictionary Keys

The default implementation of XamlObjectWriter supports type conversion on the constraints of a Dictionary<TKey, TValue> before the dictionary contents are added to the object graph. In this manner, a generic dictionary can be keyed at run time by objects and can match the relevant generic Add and indexer behavior. However, as implemented for the base XamlObjectWriter, this capability exists only for object graph creation from the base Dictionary<TKey, TValue> class and not for derived classes of Dictionary<TKey, TValue>.

Checks for Disposed

XAML writers are potentially used for deferred operations or where a call is made against a XAML writer instance that has been disposed in the interim. Various APIs of XamlObjectWriter might throw ObjectDisposedException in these cases.

.NET Framework

Supported in: 4.5, 4

.NET Framework Client Profile

Supported in: 4

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Show:
© 2014 Microsoft