C# 如何序列化XML C中的内置对象?
我有一个相互参照的复杂的类系统。我使用XML序列化来保存数据网格 课程: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
[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) 我决定展示大量代码,使其更容易理解。