Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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 如何使用c#将具有子对象列表的父对象转换为xml文件?_.net_C# 4.0 - Fatal编程技术网

.net 如何使用c#将具有子对象列表的父对象转换为xml文件?

.net 如何使用c#将具有子对象列表的父对象转换为xml文件?,.net,c#-4.0,.net,C# 4.0,我有一个父表类和一个子表主题。我已经创建了这些类的对象,并将子对象作为列表添加到父类中。现在,我想使用linq读取父表数据,并使用xml序列化将其转换为xml文件 这是我的密码 ClassMaster cls = new ClassMaster();List<ClassMaster> clsList = cls.FindAll().Where(t => t.ClassSymbol == "I").ToList(); var serializer1 = new XmlS

我有一个父表类和一个子表主题。我已经创建了这些类的对象,并将子对象作为列表添加到父类中。现在,我想使用linq读取父表数据,并使用xml序列化将其转换为xml文件

这是我的密码

ClassMaster cls = new ClassMaster();List<ClassMaster> clsList =  
  cls.FindAll().Where(t => t.ClassSymbol == "I").ToList();

var serializer1 = new XmlSerializer(cls.FindAll().GetType());
ClassMaster cls = new ClassMaster();
var stringwriter = new System.IO.StringWriter();
var serializer = new XmlSerializer(cls.GetType());
serializer.Serialize(stringwriter, cls);
ClassMaster cls=new ClassMaster();列表clsList=
其中(t=>t.ClassSymbol==“I”).ToList();
var serializer1=新的XmlSerializer(cls.FindAll().GetType());
ClassMaster cls=新的ClassMaster();
var stringwriter=new System.IO.stringwriter();
var serializer=新的XmlSerializer(cls.GetType());
serializer.Serialize(stringwriter,cls);
但它在第3行抛出了一个异常

“无法序列化成员'School.Objects.ClassMaster.classSubjectList' 类型 'System.Collections.Generic.IList`1[[School.Objects.ClassWiseSubject, School.Objects,版本=1.0.0.0,文化=中性, PublicKeyToken=null]'”

公共类主类:GenericRepository
{
公共虚拟整数ClassId{get;set;}
公共虚拟字符串类符号{get;set;}
公共虚拟字符串类名{get;set;}
公共虚拟IList类主题列表{get;set;}
}
公共类ClassWiseSubject:GenericRepository
{
公共虚拟整数Id{get;set;}
公共虚拟int ParentID{get;set;}
公共虚拟int SerialNo{get;set;}
公共虚拟字符串SubjectCode{get;set;}
}
HBM配置文件:

  <class name="ClassMaster" table="tbl_ClassMaster">
    <id name="ClassId" column="ClassId" type="int">
      <generator class="identity"></generator>
    </id>
    <property name="ClassSymbol"  column="ClassSymbol" type="string"/>
    <property name="ClassName"  column="ClassName" type="string"/>
    <list name="classSubjectList" cascade="all" lazy ="false">
      <key column="ParentID"/>
      <index column="SerialNo"/>
      <one-to-many class="ClassWiseSubject"/>
    </list>
  </class>

  <class name="SubjectMaster" table="tbl_SubjectMaster">
    <id name="SubjectId" column="SubjectId" type="int">
      <generator class="identity"></generator>
    </id>
    <property name="SubjectCode"  column="SubjectCode" type="string"/>
    <property name="SubjectName"  column="SubjectName" type="string"/>
  </class>

谢谢
Surajit不支持IList接口。您有几个选择:

  • 将类型从
    IList
    更改为具体类别(例如
    List
  • 使用
    DataContractSerializer
    而不是
    XmlSerializer
  • 实现
    IXmlSerializable
  • XmlSerializer
    读写
    classSubjectList
    创建类型为
    List
    的伪属性,并使用
    [XmlIgnore]
    属性标记
    classSubjectList

并修复格式设置。不要试图把代码放在一个编号的列表中,这是行不通的。嗨,谢谢你的回复。现在我已经使用了DataContractSerializer。请将答案标记为已接受,以便其他人看到它已解决。单击答案旁边的复选标记,将其从灰显切换为填充
  <class name="ClassMaster" table="tbl_ClassMaster">
    <id name="ClassId" column="ClassId" type="int">
      <generator class="identity"></generator>
    </id>
    <property name="ClassSymbol"  column="ClassSymbol" type="string"/>
    <property name="ClassName"  column="ClassName" type="string"/>
    <list name="classSubjectList" cascade="all" lazy ="false">
      <key column="ParentID"/>
      <index column="SerialNo"/>
      <one-to-many class="ClassWiseSubject"/>
    </list>
  </class>

  <class name="SubjectMaster" table="tbl_SubjectMaster">
    <id name="SubjectId" column="SubjectId" type="int">
      <generator class="identity"></generator>
    </id>
    <property name="SubjectCode"  column="SubjectCode" type="string"/>
    <property name="SubjectName"  column="SubjectName" type="string"/>
  </class>