IAddChild and XAML serialization process ?

  • Thread starter Thread starter azerty
  • Start date Start date
A

azerty

Hello

I try to use xaml serializer framework to save in .xaml file my own
hierarchical graph of object.


The first step is done : I create my own file with something like this :


<Root
xmlns="clr-namespace:myNameSpace;assembly=MyAssembly">
<Structure ...>
<SimpleText ... />
</Structure>
</Root>


with a simple call like this :


outStream = new System.IO.FileStream(@"c:\temp\essai.xaml",
System.IO.FileMode.Create);
using (outStream)
{
System.Windows.Markup.XamlWriter.Save(rootInstance,
outStream);
}


BUT when I want to reverse the process (Create a RootInstance from xaml
file) with a call like this :


System.IO.FileStream inStream = new
System.IO.FileStream(@"c:\temp\essai.xaml",
System.IO.FileMode.Open);
using (inStream)
{
return
(Root)System.Windows.Markup.XamlReader.Load(inStream);
}


Root is created
Structure is created
SimpleText is created
BUT i have after this, an exception like "SimpleText can be added in
Structure" occurs !!


Structure and Root derive from Container class witch supports IEnumerable
and IAddChild interface !!


I don't know what I forgot somewhere ????


could you help me


thanks a lot for your help !
 
After some research (with Reflector)

It's seems we can not use IAddChild interface in our own classes ???!

an internal method of the framework
(System.Windows.Markup.BamlRecordManager.TreatAsIAddChild) use this records
:

KnownTypes.Types[0x113].and 0x113 ref a IAddChildInternal, internal
interface witch derivates from public IAddChild interface !!

and so, TradAsIAddChild return false in

System.Windows.Markup.BamlRecordReader.GetFlagsFromType(Type elementType)

May be some one from Xaml developper team can help me !!!

thanks a lot for your help !
 
news :

BUT if Structure or Root supports IList ! all work fine !!!!

azerty said:
After some research (with Reflector)

It's seems we can not use IAddChild interface in our own classes ???!

an internal method of the framework
(System.Windows.Markup.BamlRecordManager.TreatAsIAddChild) use this
records :

KnownTypes.Types[0x113].and 0x113 ref a IAddChildInternal, internal
interface witch derivates from public IAddChild interface !!

and so, TradAsIAddChild return false in

System.Windows.Markup.BamlRecordReader.GetFlagsFromType(Type elementType)

May be some one from Xaml developper team can help me !!!

thanks a lot for your help !


azerty said:
Hello

I try to use xaml serializer framework to save in .xaml file my own
hierarchical graph of object.


The first step is done : I create my own file with something like this :


<Root
xmlns="clr-namespace:myNameSpace;assembly=MyAssembly">
<Structure ...>
<SimpleText ... />
</Structure>
</Root>


with a simple call like this :


outStream = new System.IO.FileStream(@"c:\temp\essai.xaml",
System.IO.FileMode.Create);
using (outStream)
{
System.Windows.Markup.XamlWriter.Save(rootInstance,
outStream);
}


BUT when I want to reverse the process (Create a RootInstance from xaml
file) with a call like this :


System.IO.FileStream inStream = new
System.IO.FileStream(@"c:\temp\essai.xaml",
System.IO.FileMode.Open);
using (inStream)
{
return
(Root)System.Windows.Markup.XamlReader.Load(inStream);
}


Root is created
Structure is created
SimpleText is created
BUT i have after this, an exception like "SimpleText can be added in
Structure" occurs !!


Structure and Root derive from Container class witch supports IEnumerable
and IAddChild interface !!


I don't know what I forgot somewhere ????


could you help me


thanks a lot for your help !
 
Back
Top