C# 自动映射到XML序列化生成不需要的父XML元素
我正在使用automapper将游戏的一部分映射到一个XML文件,以便将其导出: cfg.CreateMap() .ForMember(d=>d.RoomType,opt=>opt.MapFrom(src=>src.GetRoomType()) 出于某种我无法理解的原因,它向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
<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>