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: 172

Filed under:
|

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

Related posts about c#

Related posts about serialization