我正在尝试设置WCF服务,以将有关复杂对象SimCalibrationData的信息传递给客户端 . SimCalibratonData包含SimCalibrationBaseData类型的对象列表 . SimCalibrationBaseData具有SimPlateData类型的对象 . 所有类都使用[DataContract]进行修饰,公共属性使用[DataMember]进行修饰 . 如果我将SimPlateData对象包装到List <>中,我可以将它们发送到我的客户端并成功反序列化 . 如果我不包装它们,我会收到错误消息“服务器没有提供有意义的回复”,并且建议可能存在 Contract 不匹配 .
我已经读过列表和其他集合总是可以序列化和反序列化,但是如果我不想在列表中包装所有数据的麻烦,我还没有发现任何告诉我该怎么做的事情 .
这是我的服务器端代码:
[DataContract]
public class SimCalibrationData
{
private List<SimBaseCalibrationData> m_baseCalibrations = new List<SimBaseCalibrationData>();
[DataMember]
public List<SimBaseCalibrationData> BaseCalibrations
{
get { return m_baseCalibrations; }
}
public SimCalibrationData(CSimThermalCalibrationList calibrationList)
{
foreach (CSimThermalCalibration calibration in calibrationList.Listing)
{
m_baseCalibrations.Add(new SimBaseCalibrationData(calibration));
}
}
}
[DataContract]
[KnownType(typeof(SimPlateData))]
public class SimBaseCalibrationData
{
// Plate Parameters
SimPlateData m_convectorPlate;
[DataMember]
public SimPlateData ConvectorPlate
{
get { return m_convectorPlate; }
}
SimPlateData m_loadPlate;
[DataMember]
public SimPlateData LoadPlate
{
get { return m_loadPlate; }
}
public SimBaseCalibrationData(CSimThermalCalibration calibration)
{
m_convectorPlate = new SimPlateData(calibration.ConvectorPlate);
m_loadPlate = new SimPlateData(calibration.LoadPlate);
}
}
[DataContract]
public class SimPlateData
{
public SimPlateData(CSimPlate plate)
{
}
}
谢谢您的帮助 . 与此同时,我将把所有内容都包装在列表中 .
1 回答
蒂姆的第一个评论指出,序列化的属性必须有定位器,是答案 .