我想把一个类序列化,但是其中有一个属性是一个类,里面包含其他的属性:

public abstract class ComponentBase
{
    [ToSerialize]//这是我自己定义的一个attribute,用于标记是否将此字段序列化
    public ComponentArgs Parameters { get; set; }
}

public class ComponentArgs
{
        public string WorkingPath { get; set; }

        public IList<Language> Languages { get; set; }

        public string ComponentOutputPath { get; set; }
}

序列化以后的信息必须是放在dictionary<string,string>,即ComponentSetting[str_Name]=str_Value

中,读取这个setting用的是reflection,

pinfo: 用Type.GetProperties()得道的property info。

componentSettings.Add(pinfo.Name, pinfo.GetValue((object)this, null).ToString());

这样我得到的序列化以后的信息是

<Parameters>MS.STBIntl.Pippin.Framework.ComponentArgs</Parameters>

而无法得到ComponentArgs.WorkingPath等属性的值。

我想到的方法是把

componentSettings.Add(pinfo.Name, pinfo.GetValue((object)this, null).ToString());

附加一个判断,判断pinfo如果是ComponentArgs就改成这样:
componentSettings.Add(pinfo.Name, pinfo.GetValue(
    (ComponentArgs)this, null).WorkingPath+"\n"+
    LanguageList+"\n"+ //Language list是用循环生成的所有language元素的string的叠加。
    (ComponentArgs)this, null).ComponentOutputPath+"\n"+
    );

反序列化的时候,判断如果value中包含2个以上的“\n”,就用另一种算法把每个元素提取出来。

但是这种方法好像很笨,不知道有没有什么更专业一点的方法?我的上司要求很高,workaround一类的

解决方案总是不接受。但是如果您有任何的点子,不妨分享出来,我表示衷心地感谢。