XML Serialization : Has property of type Class1 : Class1 has another property : How to write the property of Class1 into XML?
        Posted  
        
            by 
                Wonderlander
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Wonderlander
        
        
        
        Published on 2010-10-15T07:48:49Z
        Indexed on 
            2010/12/23
            20:54 UTC
        
        
        Read the original article
        Hit count: 220
        
c#
|serialization
I want to serialize a class. In this class there's a property, type of Class1, while there are other properties in Class1.
public abstract class ComponentBase
{
 [ToSerialize]//An attribute defined my me, indicating whether or not to serialize this property.
 public ComponentArgs Parameters { get; set; }
}
public class ComponentArgs
{
        public string WorkingPath { get; set; }
        public IList<Language> Languages { get; set; }
        public string ComponentOutputPath { get; set; }
}
The information serialized must be put into a Dictionary, such as
ComponentSettings[str_Name]=str_Value.
The method used in reading this value is Reflection.
pinfo: Property Info got via Type.GetProperties();
componentSettings.Add(pinfo.Name, pinfo.GetValue((object)this, null).ToString());
The information after serialization is:
<Parameters>MS.STBIntl.Pippin.Framework.ComponentArgs</Parameters>
instead of the value of ComponentArgs.WorkingPath.
The solution I thought of is to append to the following line an if judgement:
    componentSettings.Add(pinfo.Name, pinfo.GetValue((object)this, null).ToString());
if(pinfo is ComponentArgs)
 componentSettings.Add(pinfo.Name, pinfo.GetValue(
  (ComponentArgs)this, null).WorkingPath+"\n"+
  LanguageList+"\n"+ //Language list is a concatinated string of all elements in the list.
  (ComponentArgs)this, null).ComponentOutputPath+"\n"+
  );
When deserializing, add a judgement of whether the value contains more than 2 "\n", if so, extract each value from the string.
But this way seems clumsy and much more like an workaround. I wonder if there's any more professional way of doing it? My reviewer is very particular and he
won't accept such a solution. If you know a way, could you please share it with me? Thanks a lot.
© Stack Overflow or respective owner