C# 如何将数据指定给嵌套模型类

C# 如何将数据指定给嵌套模型类,c#,asp.net,C#,Asp.net,我创建了一个XML模型,用于将SQL结果集转换为XML文件。 我的模型类包括内部类 下面是xml的示例模型类。 这是我准备好要转换的代码 内部类项数据不包含且缺失 这是我的xml输出文件。缺少内部类数据 <?xml version="1.0" encoding="utf-8"?> <DespatchAdvice xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dec="declaration" > <de

我创建了一个XML模型,用于将SQL结果集转换为XML文件。 我的模型类包括内部类

下面是xml的示例模型类。
这是我准备好要转换的代码
内部类项数据不包含且缺失

这是我的xml输出文件。缺少内部类数据

<?xml version="1.0" encoding="utf-8"?>
<DespatchAdvice xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dec="declaration" >
  <dec:Item1>14126</cbc:ID>
</DespatchAdvice>

14126

如何将所有数据(包括内部类数据)添加到XML文件。

您可能需要正确使用这些类?类通常有Pascal大小写。FWIW,我做得很快,没有检查这里的小问题…甚至没有编译这个

public class Mymodel
{
    // const normally are UPPERCASE
    private const string DEC = "declaration";
    private const string ABC= "declaration";

    public class InnerClass
    {
        [XmlElement( ElementName = "InnerItem", typeof(string), Namespace = ABC)]
        public string InnerItem { get; set; }
    }

    [XmlElement( ElementName = "Item1", DataType = "string", Namespace = DEC)]
    public string Item1{ get; set; }


    public Mymodel
    {
    }
    public Mymodel(string item, InnerClass inner)
    {
        this.Item1 = item;
        this.InnerClass = inner;
    }
}
课堂用途:

DataSet ds = Get_DataSet_from_Query("Select * from something");
List<Mymodel> dpAdvs = new List<Mymodel>();
Mymodel dpAdv = null;
var table = ds.Tables[0];

foreach (DataRow dr in table.Rows)
{
    Mymodel dpAdv = new Mymodel();
    dpAdv.Item1 = dr["ID"].ToString();

    dpAdv.InnerClass = new Mymodel.InnerClass();
    dpAdv.InnerClass.InnerItem = dr["ID"].ToString(),

    dpAdvs.Add(dpAdv);
}


// Define the root element
var serializer = new XmlSerializer(typeof(List<Mymodel>),
                                   new XmlRootAttribute("Mymodels"));

// or use it like this
XElement xmlElements = new XElement("Mymodels", dpAdvs.Select(i => new XElement("dpAdv", i)));
DataSet ds=Get_DataSet_from_Query(“Select*from something”);
List dpAdvs=新列表();
Mymodel dpAdv=null;
var table=ds.Tables[0];
foreach(table.Rows中的数据行dr)
{
Mymodel dpAdv=新的Mymodel();
dpAdv.Item1=dr[“ID”].ToString();
dpAdv.InnerClass=新的Mymodel.InnerClass();
dpAdv.InnerClass.InnerItem=dr[“ID”].ToString(),
添加(dpAdv);
}
//定义根元素
var serializer=新的XmlSerializer(typeof(List)),
新的XmlRootAttribute(“Mymodels”);
//或者像这样使用它
XElement xmlElements=newXelement(“Mymodels”,dpAdvs.Select(i=>newXelement(“dpAdv”,i));

现在我已经知道了。我应该为内部类声明变量

 [XmlElement( ElementName = "Item1", DataType = "string", Namespace = DEC)]
    public InnerClass Item1{ get; set; }

有关类的一些想法,请参见此处。在此处,类的使用似乎是您的问题。请对类使用Pascal大小写:
public class Mymodel
not
public class Mymodel
对常量
DEC
ABC
使用大写。注意这里如何分配大写变量
mymodel InnerClass=null
InnerClass
作为
mymodel
类-在这个案例问题上,您可以看到您在这里是如何混淆自己的。@Enigmativity-毫不奇怪,我没有时间做得更好,但我想强调这似乎是一个“类”问题,我不能称之为dpAdv.InnerClass,。。错误消息是“dpAdv是变量,但它像一个类型一样使用”,现在我已经知道了。我应该为内部类声明变量
public class Mymodel
{
    // const normally are UPPERCASE
    private const string DEC = "declaration";
    private const string ABC= "declaration";

    public class InnerClass
    {
        [XmlElement( ElementName = "InnerItem", typeof(string), Namespace = ABC)]
        public string InnerItem { get; set; }
    }

    [XmlElement( ElementName = "Item1", DataType = "string", Namespace = DEC)]
    public string Item1{ get; set; }


    public Mymodel
    {
    }
    public Mymodel(string item, InnerClass inner)
    {
        this.Item1 = item;
        this.InnerClass = inner;
    }
}
DataSet ds = Get_DataSet_from_Query("Select * from something");
List<Mymodel> dpAdvs = new List<Mymodel>();
Mymodel dpAdv = null;
var table = ds.Tables[0];

foreach (DataRow dr in table.Rows)
{
    Mymodel dpAdv = new Mymodel();
    dpAdv.Item1 = dr["ID"].ToString();

    dpAdv.InnerClass = new Mymodel.InnerClass();
    dpAdv.InnerClass.InnerItem = dr["ID"].ToString(),

    dpAdvs.Add(dpAdv);
}


// Define the root element
var serializer = new XmlSerializer(typeof(List<Mymodel>),
                                   new XmlRootAttribute("Mymodels"));

// or use it like this
XElement xmlElements = new XElement("Mymodels", dpAdvs.Select(i => new XElement("dpAdv", i)));
 [XmlElement( ElementName = "Item1", DataType = "string", Namespace = DEC)]
    public InnerClass Item1{ get; set; }