如何使用DataContractSerializer的反序列化XML [英] How to Deserialize XML using DataContractSerializer

查看:244
本文介绍了如何使用DataContractSerializer的反序列化XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想反序列化的XML文档:

I'm trying to deserialize an xml document:

<?xml version="1.0"?>               
<games xmlns = "http://serialize">
    <game>
        <name>TEST1</name>
        <code>TESTGAME1</code>
        <ugn>1111111</ugn>
        <bets>
            <bet>5,00</bet>
        </bets>
    </game>
    <game>
        <name>TEST2</name>
        <code>TESTGAME2</code>
        <ugn>222222</ugn>
        <bets>
            <bet>0,30</bet>
            <bet>0,90</bet>
        </bets>
    </game>
</games>

的.cs类:

.cs class:

namespace XmlParse
{
    using System.Collections.Generic;
    using System.Runtime.Serialization;

    [DataContract(Namespace = "http://serialize")]
    public class game
    {
        #region Public Properties

        [DataMember]
        public string name { get; set; }

        [DataMember]
        public string code { get; set; }

        [DataMember]
        public long ugn { get; set; }

        [DataMember]
        public List<decimal> bets { get; set; }

        #endregion
    }

    [KnownType(typeof(game))]
    [DataContract(Namespace = "http://serialize")]
    public class games
    {
        #region Public Properties

        [DataMember]
        public List<game> game { get; set; }

        #endregion
    }
}

主营:

FileStream fs = new FileStream(Path.Combine(this.path, xmlDocumentName), FileMode.Open);

XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
DataContractSerializer ser = new DataContractSerializer(typeof(games));

// Deserialize the data and read it from the instance.
games deserializedPerson = (games)ser.ReadObject(reader, true);
reader.Close();
fs.Close();

deserializedPerson显示计数= 0

deserializedPerson shows count = 0

怎么办?

推荐答案

我想它了。也许还有其他的实现,但这个工程。对于我的生活中,我无法找到使用列表中的对象内的任何实例。以下是一个例子:

I figured it out. Maybe there are other implementations but this works. For the life of me I couldn't find any examples that use List inside an object. Here is a working example:

XML文档解析:

<?xml version="1.0"?>               
<games xmlns = "http://serialize">
    <game>
        <name>TEST1</name>
        <code>TESTGAME1</code>
        <ugn>1111111</ugn>
        <bets>
            <bet>5,00</bet>
        </bets>
    </game>
    <game>
        <name>TEST2</name>
        <code>TESTGAME2</code>
        <ugn>222222</ugn>
        <bets>
            <bet>0,30</bet>
            <bet>0,90</bet>
        </bets>
    </game>
</games>

的.cs类:

.cs class:

namespace XmlParse
{
    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.Serialization;

    [DataContract(Name = "game", Namespace = "")]
    public class Game
    {
        [DataMember(Name = "name", Order = 0)]
        public string Name { get; private set; }

        [DataMember(Name = "code", Order = 1)]
        public string Code { get; private set; }

        [DataMember(Name = "ugn", Order = 2)]
        public string Ugn { get; private set; }

        [DataMember(Name = "bets", Order = 3)]
        public Bets Bets { get; private set; }
    }

    [CollectionDataContract(Name = "bets", ItemName = "bet", Namespace = "")]
    public class Bets : List<string>
    {
        public List<decimal> BetList
        {
            get
            {
                return ConvertAll(y => decimal.Parse(y, NumberStyles.Currency));
            }
        }
    }

    [CollectionDataContract(Name = "games", Namespace = "")]
    public class Games : List<Game>
    {
    }
}

读取并解析XML文档:

Read and parse xml document:

    string fileName = Path.Combine(this.path, "Document.xml");
    DataContractSerializer dcs = new DataContractSerializer(typeof(Games));
    FileStream fs = new FileStream(fileName, FileMode.Open);
    XmlDictionaryReader reader =XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());

    Games games = (Games)dcs.ReadObject(reader);
    reader.Close();
    fs.Close();

这篇关于如何使用DataContractSerializer的反序列化XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆