protected XamlWriterInternalBase(XamlSchemaContext schemaContext, XamlWriterStateManager manager) { this.sctx = schemaContext; this.manager = manager; var p = new PrefixLookup(sctx) { IsCollectingNamespaces = true }; // it does not raise unknown namespace error. service_provider = ValueSerializerContext.Create(p, schemaContext, this, this, this, this, this as IXamlObjectWriterFactory); }
public XamlObjectReader(object instance, XamlSchemaContext schemaContext, XamlObjectReaderSettings settings) { if (schemaContext == null) { throw new ArgumentNullException("schemaContext"); } // FIXME: special case? or can it be generalized? In .NET, For Type instance Instance returns TypeExtension at root StartObject, while for Array it remains to return Array. if (instance is Type) { instance = new TypeExtension((Type)instance); } // See also Instance property for this weirdness. this.root_raw = instance; instance = TypeExtensionMethods.GetExtensionWrapped(instance); this.root = instance; sctx = schemaContext; this.settings = settings ?? new XamlObjectReaderSettings(); // check type validity. Note that some checks also needs done at Read() phase. (it is likely FIXME:) if (instance != null) { var type = instance.GetType(); if (!type.GetTypeInfo().IsPublic) { throw new XamlObjectReaderException(String.Format("instance type '{0}' must be public and non-nested.", type)); } var xt = SchemaContext.GetXamlType(type); if (xt.ConstructionRequiresArguments && xt.GetConstructorArguments().Count == 0 && xt.TypeConverter == null) { throw new XamlObjectReaderException(String.Format("instance type '{0}' has no default constructor.", type)); } } value_serializer_context = ValueSerializerContext.Create(new PrefixLookup(sctx), sctx, null, null, null, null, null); new XamlObjectNodeIterator(instance, sctx, value_serializer_context, this.settings).PrepareReading(); }