编程语言
首页 > 编程语言> > c#-向用户展示文件XML值的最佳方法?

c#-向用户展示文件XML值的最佳方法?

作者:互联网

我有一个XML文件,看起来很熟悉:

<root>
 <carnumber>12</carnumber>
 <carcolor>2</carcolor>
 <cartype>5</cartype>
</root>

就像您看到的那样,我得到了一些带有值/文本的元素.例如,car元素的取值范围是1到1000.carcolor元素的取值范围是1-5,cartype的取值范围是1-10.

重要的是,carcolor和cartype元素的值有意义. carcolor“ 2”表示红色,“ 1”表示蓝色,依此类推.

因此,我需要向用户展示的不是值,而是值的真实含义.

我发现自己创建了一些类来表示具有有效值的元素,事情变得非常复杂,我不知道这是否是最好的方法.

我的一个朋友建议我使用XML序列化,因为我的XML文件是静态的.它永远不会改变.

我的问题很简单.我只是想知道您将如何解决这个问题.我的想法包含代表XML元素的类,例如,在这个类中的cartype我有一对字典.这表示XML文件中的值,字符串是该值的含义.而且我经常使用Linq来浏览和编辑值.

再次感谢!

解决方法:

试试看:

[XmlRoot("root")]
public class Car
{
    private static XmlSerializer serializer = new XmlSerializer(typeof(Car));

    [XmlElement("carnumber")]
    public int Number { get; set; }

    [XmlElement("carcolor")]
    public int Color { get; set; }

    [XmlElement("cartype")]
    public int Type { get; set; }

    [XmlIgnore]
    public CarColor CarColor
    {
        get
        {
            return (CarColor)Color;
        }
        set
        {
            Color = (int)value;
        }
    }

    [XmlIgnore]
    public CarType CarType
    {
        get
        {
            return (CarType)Type;
        }
        set
        {
            Type = (int)value;
        }
    }

    public string CarColorString
    {
        get
        {
            return this.CarColor.ToString().Replace('_', ' ');
        }
    }

    public string CarTypeString
    {
        get
        {
            return this.CarType.ToString().Replace('_', ' ');
        }
    }

    public string Serialize()
    {
        StringBuilder sb = new StringBuilder();
        using (StringWriter writer = new StringWriter(sb))
        {
            serializer.Serialize(writer, this);
        }
        return sb.ToString();
    }

    public static Car Deserialize(string xml)
    {
        using (StringReader reader = new StringReader(xml))
        {
            return (Car)serializer.Deserialize(reader);
        }
    }
}

public enum CarColor
{
    Red = 1,
    Blue = 2,
    Green = 3,
    Light_Brown = 4
    // and so on...
}

public enum CarType
{
    Sedan = 1,
    Coupe = 2,
    Hatchback = 3,
    SUV = 4,
    Pickup_Truck = 5
    // and so on...
}

我添加了一些枚举以供演示.

您可以设置Car的值并将其序列化为xml字符串:

Car car = new Car();
car.Number = 1;
car.CarColor = CarColor.Blue;
car.CarType = CarType.Coupe;
string xml = car.Serialize();

然后将xml字符串反序列化为汽车:

string example = 
@"<root>
 <carnumber>12</carnumber>
 <carcolor>2</carcolor>
 <cartype>5</cartype>
</root>";

Car car = Car.Deserialize(example);

为了进行演示,可以使用CarColorString和CarTypeString属性,如果枚举值包含多个单词,则可以使用空格替换下划线.

Console.WriteLine(car.CarColorString);
Console.WriteLine(car.CarTypeString);

标签:xml-serialization,linq,xml,c
来源: https://codeday.me/bug/20191106/2001735.html