【问题标题】:XMLSerializer - Class added to Namespace?XMLSerializer - 添加到命名空间的类?
【发布时间】:2014-04-10 14:49:40
【问题描述】:

过去 2 天我一直被这个问题困扰,但仍未解决,我正在寻求帮助。

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

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

这是带有生成项目的列表框的屏幕,也是被点击的按钮。

http://imgur.com/6B8GO1m

按钮点击事件

这将获取在组合框中选择的项目。然后它创建一个新的 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); }

}

【问题讨论】:

    标签: c# xml wpf namespaces webbrowser-control


    【解决方案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);
    

    对于添加自定义属性,正如我在 cmets 中所说,实现 IXmlSerializable 并实现 WriteXml 并添加您的自定义属性。

    【讨论】:

    • 感谢您的回答,它删除了蓝色框中的所有内容,但没有删除实际的 标签。
    • 好吧是你班级的名字。如果您想在没有该标签的情况下进行序列化,则需要实现 IXmlSerializable 并实现 WriteXml,如果您想读取 ReadXml
    • 是否可以让标签&lt;?xml-stylesheet type="text/xsl" href="StandardXS.xsl"?&gt;出现?
    • public void WriteXml(XmlWriter writer) { writer.WriteAttributeString(@"", string.Empty); }
    • 我将该代码添加到 SaveXML 类中,但我将在哪里调用该方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2012-01-04
    • 2011-01-30
    相关资源
    最近更新 更多