Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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# 如何序列化XML C中的内置对象?_C#_Xml_Wpf - Fatal编程技术网

C# 如何序列化XML C中的内置对象?

C# 如何序列化XML C中的内置对象?,c#,xml,wpf,C#,Xml,Wpf,我有一个相互参照的复杂的类系统。我使用XML序列化来保存数据网格 课程: [Serializable] public class CompJobArray { [XmlElement("Room")] public ObservableCollection<Room> RoomList = new ObservableCollection<Room>(); public CompJobArray() { } } public class Room

我有一个相互参照的复杂的类系统。我使用XML序列化来保存数据网格

课程:

[Serializable]
public class CompJobArray
{
    [XmlElement("Room")]
    public ObservableCollection<Room> RoomList = new ObservableCollection<Room>();
    public CompJobArray() { }
}

public class Room
{
    public string roomName { get; set; }
    public double floorSquare { get; set; }
    public double ceilingSquare { get; set; }
    public double wallsSquare { get; set; }
    public double floorPerimeter { get; set; }
    public double ceilingPerimeter { get; set; }
    public ObservableCollection<CompJob> CompJobsCollection{ get; set; }

    public Room() { }

    public Room(string Name, double fS,double cS,double wS,double fP,double cP)
    {
        roomName = Name;
        floorSquare = fS;
        ceilingSquare = cS;
        wallsSquare = wS;
        floorPerimeter = fP;
        ceilingPerimeter = cP;
        CompJobsCollection = new ObservableCollection<CompJob>();
    }

}

[Serializable]
public class CompJob
{
    public job CompJobjob { get; set; }
    public float Count { get; set; }
    public float TotalPrice { get; set; }

   public CompJob() { }

    public CompJob(job tempJob, float count)
    {
        CompJobjob = tempJob;
        Count = count;
        TotalPrice = tempJob.price*count;
    }
}

[Serializable]
public class job
{

    public int id { get; set; }
    public string name { get; set; }
    public float price { get; set; }
    public string measure { get; set; }

    public job() { }

    public job(int t1, string t2, float t3, string t4)
    {
        id = t1;
        name = t2;
        price = t3;
        measure = t4;
    }
}
[可序列化]
公共类CompJobArray
{
[XmlElement(“房间”)]
public ObservableCollection RoomList=新建ObservableCollection();
公共CompJobArray(){}
}
公共教室
{
公共字符串roomName{get;set;}
公共双楼层正方形{get;set;}
公共双天花板方形{get;set;}
公共双壁方形{get;set;}
公共双楼层参数{get;set;}
公共双天花板周长{get;set;}
公共ObservableCollection CompJobsCollection{get;set;}
公共房间(){}
公共房间(字符串名称、双fS、双cS、双wS、双fP、双cP)
{
roomName=名称;
楼面面积=fS;
天花板方形=cS;
wallsSquare=wS;
楼面面积计=fP;
天花板周长=cP;
CompJobsCollection=新的ObservableCollection();
}
}
[可序列化]
公营课程
{
公共作业CompJobjob{get;set;}
公共浮点计数{get;set;}
公共浮动总价{get;set;}
公共CompJob(){}
公共CompJob(job tempJob、float count)
{
CompJobjob=tempJob;
计数=计数;
TotalPrice=tempJob.price*count;
}
}
[可序列化]
公开课工作
{
公共int id{get;set;}
公共字符串名称{get;set;}
公开浮动价格{get;set;}
公共字符串度量值{get;set;}
公共作业(){}
公共作业(int t1、字符串t2、浮点t3、字符串t4)
{
id=t1;
name=t2;
价格=t3;
测量值=t4;
}
}
所有类在链中工作:CompJobArray->Room->CompJob->Job

Furhter、XAML和序列化:

private void SaveMenuItem_OnClick(object sender, RoutedEventArgs e)
    {
        using (StreamWriter swr = new StreamWriter(xmlFilePath))
        {
            CompJobArray tempJobArray = new CompJobArray();
            tempJobArray.RoomList = RoomList;

            deserializerCJA.Serialize(swr, tempJobArray);
        }
    }

<DataGrid  Grid.Row="2" ItemsSource="{Binding Path=CompJobsCollection}"  CanUserAddRows="True" AutoGenerateColumns="False">
      <DataGrid.Columns>
           <DataGridTextColumn Header="Наименование элемента" Binding="{ Binding Path=CompJobjob.name, Mode=TwoWay}"  />
           <DataGridTextColumn Header="Количество" Binding="{Binding Path=Count ,Mode=TwoWay}" />
           <DataGridTextColumn Header="Сумма" Binding="{Binding Path=TotalPrice,Mode=TwoWay}" />
      </DataGrid.Columns>
</DataGrid>
private void SaveMenuItem\u OnClick(对象发送方、路由目标方)
{
使用(StreamWriter swr=newstreamwriter(xmlFilePath))
{
CompJobArray tempJobArray=新的CompJobArray();
tempJobArray.RoomList=RoomList;
序列化(swr,tempJobArray);
}
}
结束时-未保存作业:

<CompJobsCollection>
  <CompJob>
    <Count>12</Count>
    <TotalPrice>150</TotalPrice>
  </CompJob>
</CompJobsCollection>

12
150
详细说明:我使用类Room将XML反序列化为ObservableCollection,然后分配Obs。收集到数据网格。当我编辑datagrid并保存它时,除了将内置在CompJob类中的job类和内置在Room类中的job类保存为Obs之外,一切都很好。收藏


在我的datagrid中编辑作业字段后,保存后,我将看到xml中的更改?

是否为compjob分配了具有值的作业实例?1)您使用的序列化程序是什么?2) 您在哪里分配
CompJobjob
?3) 你能解释一下这个问题吗?1)XMLSerializer,内置于VS13中。2) 你什么意思?作业类中的compjob?。3) 我决定展示大量代码,使其更容易理解。