【发布时间】:2015-02-26 17:25:56
【问题描述】:
我有以下几种:
基本类型:
[DataContract(Name = "protectedFile", Namespace = Constants.ManagementNamespace)]
public class ProtectedFile
{
public ProtectedFile(string virtualDiskName, FileIdInfo fileIdInfo)
{
VirtualDiskName = virtualDiskName;
FileIdInfo = fileIdInfo;
}
/// <summary>
/// Gets or sets file id information
/// </summary>
[DataMember(Name = "fileIdInfo")]
public FileIdInfo FileIdInfo { get; set; }
/// <summary>
/// Gets or sets Virtual Disk Name
/// </summary>
[DataMember(Name = "virtualDiskName")]
public string VirtualDiskName { get; set; }
// .. Equality members
}
ProtectedFile 包含类型:
[Serializable]
[DataContract(Name = "FileIdInfo", Namespace = Constants.ManagementNamespace)]
public sealed class FileIdInfo
{
public FileIdInfo()
{
}
public FileIdInfo(FileSystemFileIdInformation fsFileId, int driverFileId)
{
DriverFileId = driverFileId;
FsFileId = fsFileId;
}
/// <summary>
/// Gets or sets file system file id information
/// </summary>
[DataMember(Name = "fsFileId")]
public FileSystemFileIdInformation FsFileId { get; set; }
/// <summary>
/// Gets or sets driver file id information
/// </summary>
[DataMember(Name = "driverFileId")]
public int DriverFileId { get; set; }
// .. Equality members
}
[Serializable]
[DataContract(Name = "FileSystemFileIdInformation", Namespace = Constants.ManagementNamespace)]
[StructLayout(LayoutKind.Sequential)]
public struct FileSystemFileIdInformation
{
[DataMember(Name = "VolumeSerialNumber")]
private readonly ulong _volumeSerialNumber;
[DataMember(Name = "FileId")]
private readonly FileId128 _fileId;
public ulong VolumeSerialNumber
{
get { return _volumeSerialNumber; }
}
public FileId128 FileId
{
get { return _fileId; }
}
// .. Equality members
}
/// <summary>
/// File Identifier inside the volume (FILE_ID_128 at ntifs.h/winnt.h)
/// </summary>
[Serializable]
[DataContract(Name = "FileId128", Namespace = Constants.ManagementNamespace)]
[StructLayout(LayoutKind.Sequential)]
public struct FileId128
{
[DataMember(Name = "highPart")]
private readonly ulong _highPart;
[DataMember(Name = "lowPart")]
private readonly ulong _lowPart;
public ulong HighPart
{
get { return _highPart; }
}
public ulong LowPart
{
get { return _lowPart; }
}
// .. Equality members
}
/// <summary>
/// Internal file system file id - AAFILE_ID_INFORMATION from AAFileFilterCommon.h
/// </summary>
[Serializable]
[DataContract(Name = "FileSystemFileIdInformation", Namespace = Constants.ManagementNamespace)]
[StructLayout(LayoutKind.Sequential)]
public struct FileSystemFileIdInformation
{
[DataMember(Name = "VolumeSerialNumber")]
private readonly ulong _volumeSerialNumber;
[DataMember(Name = "FileId")]
private readonly FileId128 _fileId;
public ulong VolumeSerialNumber
{
get { return _volumeSerialNumber; }
}
public FileId128 FileId
{
get { return _fileId; }
}
// .. Equality members
}
一切看起来都不错,每个数据契约成员都有一个唯一的名称,但我得到一个序列化异常
无效数据合同异常: FileIdInfo 类型包含两个相同的成员 FsFileId 和 DriverFileId 数据成员名称 fsFileId但我只有一个同名的成员。唯一不寻常的是我使用结构作为数据成员,但这是受支持的。
怎么了?
【问题讨论】:
标签: c# .net wcf datacontractserializer datacontract