序列化对象列表

拉德·托莫维奇(Rade Tomovic)

我需要对一些XML代码进行序列化/反序列化,部分内容类似于下一个示例:

<CoordGeom>
    <Curve rot="cw" chord="830.754618036885" crvType="arc" delta="72.796763873948" dirEnd="283.177582669379" dirStart="355.974346543327" external="169.661846548051" length="889.38025007632" midOrd="136.562611151675" radius="699.999999998612" tangent="516.053996536113">
        <Start>4897794.2800513292 6491234.9390137056</Start>
        <Center>4897096.0071489429 6491185.7968343571</Center>
        <End>4897255.5861026254 6491867.3645547926</End>
        <PI>4897758.0514541129 6491749.7197593488</PI>
    </Curve>
    <Spiral length="109.418078418008" radiusEnd="INF" radiusStart="699.999999999025" rot="cw" spiType="clothoid" theta="4.477995782709" totalY="2.849307921907" totalX="109.351261203955" tanLong="72.968738862921" tanShort="36.493923980983">
        <Start>4897255.5861026254 6491867.3645547936</Start>
        <PI>4897220.0531303799 6491875.6840722272</PI>
        <End>4897147.9238984985 6491886.7208634559</End>
    </Spiral>
    <Spiral length="153.185309785019" radiusEnd="499.99999999993" radiusStart="INF" rot="ccw" spiType="clothoid" theta="8.776871734087" totalY="7.808812331497" totalX="152.826239431476" tanLong="102.249348442205" tanShort="51.176160975293">
        <Start>4897147.9238985004 6491886.7208634559</Start>
        <PI>4897046.8509311257 6491902.186455016</PI>
        <End>4896998.0370401107 6491917.5553683294</End>
    </Spiral>
    <Curve rot="ccw" chord="936.510896488672" crvType="arc" delta="138.94725576785" dirEnd="66.423714388543" dirStart="287.476458620693" external="925.970149937768" length="1212.543549877849" midOrd="324.680762068264" radius="499.999999999181" tangent="1335.436583485725">
        <Start>4896998.0370401107 6491917.5553683294</Start>
        <Center>4897148.1939981515 6492394.4755796343</Center>
        <End>4896948.2091376046 6492852.7397562303</End>
        <PI>4895724.243644949 6492318.6055583945</PI>
    </Curve>
</CoordGeom>

我已经使用xsd.exe自动生成了类。生成的代码的一部分如下所示:

public partial class CoordGeom
    {
        private List<object> _items;
        private List<Feature> _feature;
        private string _desc;
        private string _name;
        private stateType _state;
        private string _oID;

        public CoordGeom()
        {
            _feature = new List<Feature>();
            _items = new List<object>();
        }

       [XmlElementAttribute("Chain", typeof(Chain))]
       [XmlElementAttribute("Curve", typeof(Curve))]
       [XmlElementAttribute("IrregularLine", typeof(IrregularLine))]
       [XmlElementAttribute("Line", typeof(Line))]
       [XmlElementAttribute("Spiral", typeof(Spiral))]
        public List<object> Items
        {
            get { return this._items; }
            set { this._items = value; }
        }

        [XmlElement("Feature")]
        public List<Feature> Feature { get; set; }

        [XmlAttribute()]
        public string desc { get; set; }

        [XmlAttribute()]
        public string name { get; set; }

        [XmlAttribute()]
        public stateType state { get; set; }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string oID
        {
            get{ return this._oID; }
            set{ this._oID = value; }
        }
    }

我的反序列化代码如下所示:

XmlSerializer mySerializer = new XmlSerializer(typeof(LandXML), new XmlRootAttribute(""));
TextReader myFileStream = new StreamReader("myFile.xml");
LandXML myObject = (LandXML)mySerializer.Deserialize(myFileStream);
var coordGeomItems = myObject.Alignments.Alignment[0].CoordGeom;

我的问题是,当我反序列化文件时,它会反序列化为{LandXML.Curve},{LandXML.Spiral}等类型的项目列表,而且我不知道如何访问它们的属性。如果我可以直接执行此操作,那将很好。这是屏幕截图:

调试屏幕截图

编辑1

这是初始屏幕 在此处输入图片说明

然后我有项目:

在此处输入图片说明

当我展开这个

在此处输入图片说明

这是对象的顶层-它具有一些InnerXml,InnerText ...如果我想实现CoordGeom,则有很多object.Item(i).ChildNodes.Item(j).ChildNodes ...

这是因为在某些行中,对象列表的生成类似于CoordGeom的List

查尔斯·玛格

因为存在多种允许的类型,所以将Items集合作为对象键入。最简单的方法是枚举并强制转换每个项目:

foreach(var item in coordGeomItems.Items)
{
    var curve = item as Curve;
    if (curve != null)
    {
        // access curve properties here
    }

    var spiral = item as Spiral
    if (spiral != null)
    {
        // access spiral properties here
    }

    // ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

序列化对象列表

来自分类Dev

序列化对象中的对象列表

来自分类Dev

序列化包含对象列表的对象

来自分类Dev

Gson序列化多态对象列表

来自分类Dev

RestTemplate和对象列表的序列化

来自分类Dev

对象列表的JSON反序列化

来自分类Dev

反\序列化对象列表XML

来自分类Dev

尝试序列化对象列表失败

来自分类Dev

使用对象列表反/序列化

来自分类Dev

C#序列化带有对象列表的对象

来自分类Dev

对象从列表继承时序列化对象

来自分类Dev

反序列化对象列表而不包含总体对象

来自分类Dev

使用BinaryFormatter序列化/反序列化对象列表

来自分类Dev

使用json和python序列化/反序列化对象列表

来自分类Dev

JSON Newtonsoft C#序列化/反序列化对象列表的良好实践

来自分类Dev

如何从序列化的数组列表中选择某些对象?

来自分类Dev

GSON反序列化包装对象列表

来自分类Dev

反序列化不同对象的列表

来自分类Dev

使用Json.NET序列化对象列表

来自分类Dev

JSON序列化列表<KeyValuePair <字符串,对象>>

来自分类Dev

使用protobuf反序列化对象列表

来自分类Dev

Django REST框架:不同序列化对象的列表?

来自分类Dev

C#中XML列表对象的反序列化

来自分类Dev

从要显示的文件中反序列化对象列表

来自分类Dev

使用可空嵌套列表序列化对象

来自分类Dev

Jackson Json将对象反序列化到列表

来自分类Dev

如何反序列化无效的json?截断的对象列表

来自分类Dev

如何反序列化C#对象的值列表

来自分类Dev

Django REST Framework:不同序列化对象的列表?