Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
.net 反序列化嵌套元素的序列_.net_Xml Serialization - Fatal编程技术网

.net 反序列化嵌套元素的序列

.net 反序列化嵌套元素的序列,.net,xml-serialization,.net,Xml Serialization,如何将以下XML反序列化为我创建的实体,这让我感到困惑: <values totalcount="576"> <version>3</version> <item> <datetime>2/22/2016 8:35:00 PM - 8:40:00 PM</datetime> <value channel="Outside" channelid="4">

如何将以下XML反序列化为我创建的实体,这让我感到困惑:

 <values totalcount="576">
      <version>3</version>
      <item>
         <datetime>2/22/2016 8:35:00 PM - 8:40:00 PM</datetime>
         <value channel="Outside" channelid="4">10.0000</value>
      </item>
      <item>
         <datetime>2/22/2016 8:40:00 PM - 8:45:00 PM</datetime>
         <value channel="Inside" channelid="2"/>
      </item>
   </values>

3.
2016年2月22日8:35:00 PM-8:40:00 PM
10
2016年2月22日8:40:00 PM-8:45:00 PM
这些是我用过的课程。当我反序列化时,ValueItems列表正确创建,项目数正确,我得到了正确的TotalCount和版本值,但每个ValueItem的成员都有默认值,而不是预期值:

public class Values
    {
        [XmlAttribute(AttributeName = "totalcount")]
        public int TotalCount { get; set; }

        [XmlElement(ElementName = "version")]
        public string Version { get; set; }

        [XmlElement(ElementName ="item")]
        public List<ValueItem> ValueItems { get; set; }
    }

  public class ValueItem
    {
        [XmlElement(ElementName = "datetime")]
        public string DateTime { get; set; }

        [XmlElement(ElementName="value")]
        public SensorValue Value { get; set; }
    }

public class SensorValue
    {
        [XmlAttribute(AttributeName = "channel")]
        public string Channel { get; set; }

        [XmlAttribute(AttributeName = "channelid")]
        public string ChannelId { get; set; }

        public string Value { get; set; }
    }
公共类值
{
[XmlAttribute(AttributeName=“totalcount”)]
公共整数TotalCount{get;set;}
[xmlement(ElementName=“version”)]
公共字符串版本{get;set;}
[xmlement(ElementName=“item”)]
public List ValueItems{get;set;}
}
公共类价值项目
{
[xmlement(ElementName=“datetime”)]
公共字符串日期时间{get;set;}
[xmlement(ElementName=“value”)]
公共值{get;set;}
}
公共阶级价值观
{
[XmlAttribute(AttributeName=“channel”)]
公共字符串通道{get;set;}
[XmlAttribute(AttributeName=“channelid”)]
公共字符串ChannelId{get;set;}
公共字符串值{get;set;}
}
我尝试过用XmlArrayItem(“item”)装饰ValueItems。我尝试了XmlArrayItem和XmlArray。我尝试过用XmlType(“item”)装饰ValueItem类


有什么想法吗?关于使用XmlAttributes的MSDN文档并不全面。

您可以使用Visual Studio内置的XML to类从XML中获取以下内容:

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class values {

    private byte versionField;

    private valuesItem[] itemField;

    private ushort totalcountField;

    /// <remarks/>
    public byte version {
        get {
            return this.versionField;
        }
        set {
            this.versionField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("item")]
    public valuesItem[] item {
        get {
            return this.itemField;
        }
        set {
            this.itemField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public ushort totalcount {
        get {
            return this.totalcountField;
        }
        set {
            this.totalcountField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class valuesItem {

    private string datetimeField;

    private valuesItemValue valueField;

    /// <remarks/>
    public string datetime {
        get {
            return this.datetimeField;
        }
        set {
            this.datetimeField = value;
        }
    }

    /// <remarks/>
    public valuesItemValue value {
        get {
            return this.valueField;
        }
        set {
            this.valueField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class valuesItemValue {

    private string channelField;

    private byte channelidField;

    private string valueField;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string channel {
        get {
            return this.channelField;
        }
        set {
            this.channelField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte channelid {
        get {
            return this.channelidField;
        }
        set {
            this.channelidField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlTextAttribute()]
    public string Value {
        get {
            return this.valueField;
        }
        set {
            this.valueField = value;
        }
    }
}
//
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace=”“,IsNullable=false)]
公共部分类值{
专用字节版本字段;
private valuesItem[]项目字段;
私人住宅区;
/// 
公共字节版本{
得到{
返回此.version字段;
}
设置{
this.versionField=值;
}
}
/// 
[System.Xml.Serialization.xmlementAttribute(“项”)]
公共价值项目[]项目{
得到{
返回此.itemField;
}
设置{
this.itemField=值;
}
}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共卫生服务总数{
得到{
返回此.totalcountField;
}
设置{
this.totalcountField=值;
}
}
}
/// 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类valuesItem{
私有字符串日期字段;
private ValueSite Value valueField;
/// 
公共字符串日期时间{
得到{
返回此.datetime字段;
}
设置{
this.datetimeField=值;
}
}
/// 
公共价值网站价值{
得到{
返回此.valueField;
}
设置{
this.valueField=值;
}
}
}
/// 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类值SiteValue{
私有字符串信道域;
专用字节信道域;
私有字符串值字段;
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串频道{
得到{
返回此.channelField;
}
设置{
this.channelField=值;
}
}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字节信道ID{
得到{
返回此.channelidField;
}
设置{
this.channelidField=值;
}
}
/// 
[System.Xml.Serialization.XmlTextAttribute()]
公共字符串值{
得到{
返回此.valueField;
}
设置{
this.valueField=值;
}
}
}

您只需使用Visual Studio内置的XML to类即可从XML中获取:

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class values {

    private byte versionField;

    private valuesItem[] itemField;

    private ushort totalcountField;

    /// <remarks/>
    public byte version {
        get {
            return this.versionField;
        }
        set {
            this.versionField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("item")]
    public valuesItem[] item {
        get {
            return this.itemField;
        }
        set {
            this.itemField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public ushort totalcount {
        get {
            return this.totalcountField;
        }
        set {
            this.totalcountField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class valuesItem {

    private string datetimeField;

    private valuesItemValue valueField;

    /// <remarks/>
    public string datetime {
        get {
            return this.datetimeField;
        }
        set {
            this.datetimeField = value;
        }
    }

    /// <remarks/>
    public valuesItemValue value {
        get {
            return this.valueField;
        }
        set {
            this.valueField = value;
        }
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class valuesItemValue {

    private string channelField;

    private byte channelidField;

    private string valueField;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string channel {
        get {
            return this.channelField;
        }
        set {
            this.channelField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte channelid {
        get {
            return this.channelidField;
        }
        set {
            this.channelidField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlTextAttribute()]
    public string Value {
        get {
            return this.valueField;
        }
        set {
            this.valueField = value;
        }
    }
}
//
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace=”“,IsNullable=false)]
公共部分类值{
专用字节版本字段;
private valuesItem[]项目字段;
私人住宅区;
/// 
公共字节版本{
得到{
返回此.version字段;
}
设置{
this.versionField=值;
}
}
/// 
[System.Xml.Serialization.xmlementAttribute(“项”)]
公共价值项目[]项目{
得到{
返回此.itemField;
}
设置{
this.itemField=值;
}
}
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共卫生服务总数{
得到{
返回此.totalcountField;
}
设置{
this.totalcountField=值;
}
}
}
/// 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类valuesItem{
私有字符串日期字段;
private ValueSite Value valueField;
/// 
公共字符串日期时间{
得到{
返回此.datetime字段;
}
设置{
this.datetimeField=值;
}
}
/// 
公共价值网站价值{
得到{
返回此.valueField;
}
设置{
this.valueField=值;
}
}
}
/// 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类值SiteValue{
私有字符串信道域;
专用字节信道域;
私有字符串值字段;
/// 
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串频道{
得到{
返回此.channelField;
}
设置{
this.channelField=值;
}
}
/// 
[Sys
string xml = File.ReadAllText("XMLFile1.xml");
using (StringReader reader = new StringReader(xml))
{
    var serializer = new XmlSerializer(typeof(Values), new XmlRootAttribute("values") );
    var result = serializer.Deserialize(reader) as Values;

    result.ValueItems.ForEach(v => Console.WriteLine(v.Value.Value));
}