用c#生成XML文档

本文关键字:文档 XML 生成 | 更新日期: 2023-09-27 18:11:37

我需要生成一个遵循此规范的XML文档

<productName locale="en_GB">Name</productName>

但是使用xmlserialization,我得到以下

<productName locale="en_GB">
<Name>Name</Name>
</productName>
我的c#代码是这样的:
[Serializable]
public class productName
{
    public productName()
    {
    }
    public string Name;
    [XmlAttribute]
    public string locale;
}

XmlAttribute是在正确的位置显示区域设置所需要的,但是我无法弄清楚如何正确导出Name字段。

有人有什么想法吗?

感谢编辑:

这是生成XML 的代码
public static class XMLSerialize
{
    public static void SerializeToXml<T>(string file, T value)
    {
        var serializer = new XmlSerializer(typeof(T));
        using (var writer = XmlWriter.Create(file))
            serializer.Serialize(writer, value);
    }
    public static T DeserializeFromXML<T>(string file)
    {
        XmlSerializer deserializer = new XmlSerializer(typeof(T));
        TextReader textReader = new StreamReader(file);
        T result;
        result = (T)deserializer.Deserialize(textReader);
        textReader.Close();
        return result;
    }
}

用c#生成XML文档

通过添加[XmlText]属性

Name指定为文本值而不是指定名称作为元素
[XmlText]
public string Value { get; set; }

这不仅包含了对你的问题的直接回答,还包含了对将来如何解决类似问题的间接回答。

从另一种方式开始,用你的xml,写你想要的xml,从那里开始,像这样:

// assuming data.xml contains the xml as you'd like it
> xsd.exe data.xml             // will generate data.xsd, ie xsd-descriptor
> xsd.exe data.xsd /classes    // will generate data.cs, ie c# classes
> notepad.exe data.cs          // have a look at data.cs with your favorite editor

现在看一下data.cs,它将包含大量的属性和东西,并且名称空间可能是错误的,但至少您知道如何解决特定的xml问题。

直接的答案是对给定的属性使用XmlTextAttribute,最好将其命名为Value,因为这是我迄今为止看到的惯例。

[Serializable]
public class productName {
 public productName() { }
 [XmlText]
 public string Value {get; set;}
 [XmlAttribute]
 public string locale {get; set;}
}