Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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中向数组添加根元素?_C#_Xml - Fatal编程技术网

C# 如何在XML中向数组添加根元素?

C# 如何在XML中向数组添加根元素?,c#,xml,C#,Xml,我想将类反序列化为XML documnet。我有: public partial class CurveType : AbstractCurveType { private AbstractCurveSegmentType[] segmentsField; /// <remarks/> [ XmlElement(Type = typeof(ArcType)), XmlElement(Type = typeof(CircleType)),

我想将类反序列化为XML documnet。我有:

public partial class CurveType : AbstractCurveType {

    private AbstractCurveSegmentType[] segmentsField;

    /// <remarks/>
    [ XmlElement(Type = typeof(ArcType)),
      XmlElement(Type = typeof(CircleType)),
      XmlElement(Type = typeof(LineStringSegmentType), ElementName = "LineStringSegment")]
    public AbstractCurveSegmentType[] segments {
        get {
            return this.segmentsField;
        }
        set {
            this.segmentsField = value;
        }
    }
}
但我想看到:

  <gml:Curve>
   <gml:segments>
      <gml:LineStringSegment>
        ***
      </gml:LineStringSegment>
   </gml:segments>
 </gml:Curve>

***
当我删除注释
xmlement
时,我得到了我的
,但在这种情况下,所有
都变成了


如何添加此
根元素?

您可以尝试创建另一个类似于包装器的类:

[XmlRoot(ElementName = "Curve")]
public class ObjectModel {
    [XmlElement(ElementName = "segments")]
    public CurveType CurveTypes {get; set;}
}
然后初始化对象并序列化它们:

AbstractCurveSegmentType[] arr = new AbstractCurveSegmentType[] 
{
    new ArcType { Id = 1, ArcTypeName = "arcTypeName"},
    new CircleType { Id = 2, CircleTypeName = "circleTypeName"}
};


var obj = new ObjectModel
{
    CurveTypes = new CurveType { segments = arr }
};

var xml = Xml.Serialize(obj);
这是序列化的帮助器方法:

public class Xml
{
    public static string Serialize<T>(T obj)
        {
            var xmlSerializer = new XmlSerializer(obj.GetType());
            using (var textWriter = new StringWriter())
            {
                xmlSerializer.Serialize(textWriter, obj);
                return textWriter.ToString();
            }
        }
}
公共类Xml
{
公共静态字符串序列化(T obj)
{
var xmlSerializer=新的xmlSerializer(obj.GetType());
使用(var textWriter=new StringWriter())
{
序列化(textWriter,obj);
返回textWriter.ToString();
}
}
}
您可以得到以下xml:


1.
arcTypeName
2.
圈型名称
public class Xml
{
    public static string Serialize<T>(T obj)
        {
            var xmlSerializer = new XmlSerializer(obj.GetType());
            using (var textWriter = new StringWriter())
            {
                xmlSerializer.Serialize(textWriter, obj);
                return textWriter.ToString();
            }
        }
}