Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中的XmlElement#_C#_Xmlserializer - Fatal编程技术网

C# C中的XmlElement#

C# C中的XmlElement#,c#,xmlserializer,C#,Xmlserializer,我在C#中有一个简单的类,通过使用XmlSerializer类将其序列化为XML [Serializable, XmlRoot("dc", Namespace= dc.NS_DC)] public class DCItem { // books?? [XmlElement("title")] public string Title { get; set; } } DCItem序列化很棒,因为代码现在已经设置好了(如上所示);但是,我想更改属性“Title”,使其包

我在C#中有一个简单的类,通过使用XmlSerializer类将其序列化为XML

[Serializable, XmlRoot("dc", Namespace= dc.NS_DC)]
public class DCItem {

    // books??

    [XmlElement("title")]
    public string Title { get; set; }

}
DCItem序列化很棒,因为代码现在已经设置好了(如上所示);但是,我想更改属性“Title”,使其包含在“Books”节点中。例如:

<dc>
  <books>
    <title>Joe's Place</title>
  </books>
</dc>

乔家

执行此操作的最佳方法是什么?

您可以定义一个Books类:

public class Books
{
    [XmlElement("title")]
    public string Title { get; set; }
}
然后:

[XmlRoot("dc", Namespace= dc.NS_DC)]
public class DCItem 
{
    [XmlElement("books")]
    public Books Books { get; set; }
}
还要注意的是,我已经去掉了Serializable属性,该属性由二进制序列化程序使用,但被XmlSerializer类完全忽略

既然我怀疑你可能有多本书:

<dc>
  <books>
    <title>Joe's Place</title>
    <title>second book</title>
    <title>third book</title>
  </books>
</dc>

最简单的方法是创建一个包含title属性的books类

public class booksType
{
    public string title {get;set;}
}
并将其用作主类中books属性的类型

public booksType books {get;set;}

我假设您希望在
下有几个
。那么这是一种方法:

[XmlType("title")]
public class Title 
{
    [XmlText]
    public string Text { get; set; }
}

[XmlRoot("dc")]
public class DCItem 
{
    [XmlArray("books")]
    public List<Title> Books { get; set; }
}
[XmlType(“标题”)]
公开课名称
{
[XmlText]
公共字符串文本{get;set;}
}
[XmlRoot(“dc”)]
公共类DCItem
{
[XmlArray(“书籍”)]
公共列表书籍{get;set;}
}

但是,您可能希望使用
元素,并将title作为属性或元素放在
上,因为XML序列化不需要
可序列化的属性!我很困惑。。您只是想要一个
列表
,其中
书籍
具有
标题
属性?而不是
结构
。只需使用
。谢谢!这正是我思考的方向,但我更好奇的是,我是否可以只是懒惰,而不必通过创建更多类的努力。
[XmlType("title")]
public class Title 
{
    [XmlText]
    public string Text { get; set; }
}

[XmlRoot("dc")]
public class DCItem 
{
    [XmlArray("books")]
    public List<Title> Books { get; set; }
}