Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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# 自动映射到XML序列化生成不需要的父XML元素_C#_Asp.net Core_Automapper_Xml Serialization_Ienumerable - Fatal编程技术网

C# 自动映射到XML序列化生成不需要的父XML元素

C# 自动映射到XML序列化生成不需要的父XML元素,c#,asp.net-core,automapper,xml-serialization,ienumerable,C#,Asp.net Core,Automapper,Xml Serialization,Ienumerable,我正在使用automapper将游戏的一部分映射到一个XML文件,以便将其导出: cfg.CreateMap() .ForMember(d=>d.RoomType,opt=>opt.MapFrom(src=>src.GetRoomType()) 出于某种我无法理解的原因,它向XML添加了一个父元素,如下所示: <RoomType> <RoomType monster="Random">X_Y001</RoomType> <RoomTy

我正在使用automapper将游戏的一部分映射到一个XML文件,以便将其导出:

cfg.CreateMap() .ForMember(d=>d.RoomType,opt=>opt.MapFrom(src=>src.GetRoomType())

出于某种我无法理解的原因,它向XML添加了一个父元素,如下所示:

  <RoomType>
    <RoomType monster="Random">X_Y001</RoomType>
    <RoomType monster="Random">X_Y003</RoomType>
    <RoomType monster="Random">X_Y005</RoomType>
  </RoomType>   
    <RoomType monster="Random">X_Y001</RoomType>
    <RoomType monster="Random">X_Y003</RoomType>
    <RoomType monster="Random">X_Y005</RoomType>
这是一个示例结果:

  <RoomType>
    <RoomType monster="Random">X_Y001</RoomType>
    <RoomType monster="Random">X_Y003</RoomType>
    <RoomType monster="Random">X_Y005</RoomType>
  </RoomType>       

X_Y001
X_Y003
X_Y005
因此数据是正确的,但它添加了它不需要的开始和结束

我不知道它为什么这么做

起初,我认为这是因为GetRoomType()返回的不是“null”,但我添加了“yield break”,以阻止它在发现null时返回任何内容

所以我不知所措。我不知道它为什么这样做

有人看到可能是什么原因吗


谢谢

如果父元素是
,那可以接受吗?好吧,实际的父元素是,而其他一些元素是子元素。只有RoomType映射导致了此问题。谢谢我不认为直接输入是严格符合XML的。@Neil你可能是对的,但这只是个人使用。正在映射的其他元素工作正常。只是这一个令人讨厌。:)不管它是否用于个人用途,XML工具都会试图阻止您做不符合要求的事情。尝试将
[XmlElement(“RoomTypes”)]
放在要序列化的集合上。
public static readonly IDictionary<Int32, RoomType> RoomLookupByTypeId =
    new Dictionary<Int32, RoomType> {
        {373, new RoomType("X_Y001")},
        {488, new RoomType("X_Y002")},
        {467, new RoomType("X_Y003")},
        {238, new RoomType("X_Y004")},
        {756, new RoomType("X_Y005")}
    };
public class RoomType
{
    [XmlText]
    public String TypeId { get; set; }

    [XmlAttribute("monster")]
    public String Monster
    {
        get { return "Random"; }
        set { throw new NotSupportedException("Computed property, setter only exists for XmlSerializer"); }
    }

    public RoomType() { }

    public RoomType(String Id)
    {
        TypeId = Id;
    }

}   
  <RoomType>
    <RoomType monster="Random">X_Y001</RoomType>
    <RoomType monster="Random">X_Y003</RoomType>
    <RoomType monster="Random">X_Y005</RoomType>
  </RoomType>