我正在反序列化XML文件和对象模型。尽管这不是实际的模型,但下面的结构与我所拥有的相似。

[Serializable()]
[System.Xml.Serialization.XmlRoot("AutoEnvelope")]
public class AutoBody
{
    [XmlArray("AutoBody")]
    [XmlArrayItem("Vehicles", typeof(Vehicles))]
    public Vehicles[] Vehicles { get; set; }

}

[Serializable()]
public class Vehicles
{
    [XmlElement("SelectedCar", typeof(SelectedCar))]
    public SelectedCar SelectedCar { get; set; }

    [XmlElement("OfferedVehicles", typeof(OfferedVehicles))]
    public OfferedVehicles OfferedVehicles { get; set; }

}

[Serializable()]
public class SelectedCar
{
    [System.Xml.Serialization.XmlElement("Model")]
    public string Model { get; set; }

    [System.Xml.Serialization.XmlElement("NumTires")]
    public int NumTires { get; set; }

    [System.Xml.Serialization.XmlElement("Color")]
    public string Color { get; set; }

}

我正在尝试获取SelectedCar.Color值的独特列表,但未成功。假设我将数据存储在一个名为autoBody的变量中,我尝试了以下方法的变体:
List<char> uniqueColors = autoBody.SelectMany(auto => auto.SelectedCar.Color).Distinct().ToList();

我显然做错了事,但是不清楚如何实现我想要的。

最佳答案

试试这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication70
{
    class Program
    {
        static void Main(string[] args)
        {
            AutoBody bodies = new AutoBody()
            {
               vehicles = new List<Vehicles>()
                {
                    new Vehicles() {
                        SelectedCar = new SelectedCar() { Model = "Ford", NumTires = 1, Color = "red"}
                    },
                    new Vehicles() {
                        SelectedCar = new SelectedCar() { Model = "Chevy", NumTires = 2, Color = "blue"}
                    },
                    new Vehicles() {
                        SelectedCar = new SelectedCar() { Model = "Jeep", NumTires = 3, Color = "green"}
                    },
                    new Vehicles() {
                        SelectedCar = new SelectedCar() { Model = "Merecedes", NumTires = 4, Color = "red"}
                    },
                }
            };
            List<string> colors = bodies.vehicles.Select(x => x.SelectedCar).Select(y => y.Color).Distinct().ToList();

        }
    }
    [Serializable()]
    [System.Xml.Serialization.XmlRoot("AutoEnvelope")]
    public class AutoBody
    {
        [XmlArray("AutoBody")]
        [XmlArrayItem("Vehicles", typeof(Vehicles))]
        public List<Vehicles> vehicles { get; set; }

    }

    [Serializable()]
    public class Vehicles
    {
        [XmlElement("SelectedCar", typeof(SelectedCar))]
        public SelectedCar SelectedCar { get; set; }

        //[XmlElement("OfferedVehicles", typeof(OfferedVehicles))]
        //public OfferedVehicles OfferedVehicles { get; set; }

    }

    [Serializable()]
    public class SelectedCar
    {
        [System.Xml.Serialization.XmlElement("Model")]
        public string Model { get; set; }

        [System.Xml.Serialization.XmlElement("NumTires")]
        public int NumTires { get; set; }

        [System.Xml.Serialization.XmlElement("Color")]
        public string Color { get; set; }

    }
}

关于c# - 从嵌套对象获取不同的值列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34883817/

10-12 00:27
查看更多