Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.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# 如何使用DataContractSerializer反序列化XML_C#_Asp.net_.net_Datacontractserializer_Xml Deserialization - Fatal编程技术网

C# 如何使用DataContractSerializer反序列化XML

C# 如何使用DataContractSerializer反序列化XML,c#,asp.net,.net,datacontractserializer,xml-deserialization,C#,Asp.net,.net,Datacontractserializer,Xml Deserialization,我正在尝试反序列化xml文档: <?xml version="1.0"?> <games xmlns = "http://serialize"> <game> <name>TEST1</name> <code>TESTGAME1</code> <ugn>1111111</ugn> <

我正在尝试反序列化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>
<?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>
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();
.cs类:

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
    }
}
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>
    {
    }
}
反序列化人员显示计数=0

有什么好处


我想出来了。也许还有其他实现,但这是可行的。在我的一生中,我找不到任何在对象中使用列表的示例。以下是一个工作示例:

要分析的XML文档:

.cs类:

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
    }
}
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>
    {
    }
}

您需要order属性,因为默认行为是按字母顺序排列的。可能重复