XMLSerializer - 类添加到Namespace?

时间:2014-04-10 14:49:40

标签: c# xml wpf namespaces webbrowser-control

过去两天我一直坚持这个问题但仍然没有成功,我正在寻求帮助。

我的Listbox会根据Combobox中选择的项目添加生成的项目。当我单击按钮Create时,会出现一个新窗口,其中包含一个WebBrowser对象。

(不允许上传图片,因此它包含在链接中)

这是带有列表框的屏幕,其中包含生成的项目以及单击的按钮。

http://imgur.com/6B8GO1m

按钮点击活动

这将获得在Combobox中选择的项目。然后它创建一个Alrighty类的新实例,其属性名为Standards,其中包含项目列表(列表框中的项目)。该属性用第三行填充,然后我有另一个名为SaveXML的类(见下文),这将保存为XML。然后将打开浏览器。

string selectedStandard = (string)cmbStandard.SelectedItem;
Alrighty info = new Alrighty();
info.Standards = _standardDefinitions;
SaveXML.SaveData(info, string.Format("{0}.xml", selectedStandard));

HTMLBrowser boss = new HTMLBrowser(selectedStandard);
boss.Show();

SaveXML类

public static void SaveData(object obj, string filename)
{
    XmlSerializer sr = new XmlSerializer(obj.GetType());
    TextWriter writer = new StreamWriter(filename);
    sr.Serialize(writer, obj);
    writer.Close();
}

问题

当我点击按钮并进入带有Web Browser的窗口时,会出现此代码:

http://imgur.com/zF465n5

正如您从蓝框中看到的,当我删除此代码并为我的Stylesheet添加代码时,一切正常,但问题是蓝框中的代码一直生成,是否存在无法在创建的XML文件中获取此代码的方法。

额外

如何在蓝框中显示此字符串而不是生成的代码:

<?xml-stylesheet type="text/xsl" href="StandardXS.xsl"?>

编辑:

public class SaveXML
{
    public static void SaveData(object obj, string filename)
    {

        //empty namespace and empty value
        XmlSerializerNamespaces alright = new XmlSerializerNamespaces();

        alright.Add("", "");

        XmlSerializer sr = new XmlSerializer(obj.GetType());
        TextWriter writer = new StreamWriter(filename);

        sr.Serialize(writer, obj, alright);
        writer.Close();

    }

    public void WriteXml(XmlWriter writer) { writer.WriteAttributeString(@"<?xml-stylesheet type=text/xsl href=StandardXS.xsl?>", string.Empty); }

}

1 个答案:

答案 0 :(得分:1)

你可以这样做:

XmlSerializerNamespaces namespace = new     XmlSerializerNamespaces();

//empty namespace and empty value
namespace.Add("", "");

XmlSerializer serializer = new XmlSerializer(someType);

//Serialize the object with custom namespace
serializer.Serialize(xmlTextWriter, myObj, namespace);

为了添加自定义属性,正如我在评论中所说,实现IXmlSerializable并实现WriteXml并添加自定义属性。