【发布时间】:2018-04-20 20:33:38
【问题描述】:
我定义了这些类:
[DataContract(Name = "cardTemplateDefinition", Namespace = "")]
public class CardTemplateDefinition
{
[DataMember(IsRequired = false, Name = "riskInfoList")]
public RiskInfoList RiskInfoList { get; set; }
}
[DataContract(Namespace = "")]
public class RiskInfoList
{
[DataMember(IsRequired = false, Name = "riskCount")]
public string RiskCount { get; set; }
[DataMember(IsRequired = false, Name = "riskInfo")]
public List<RiskInfo> RiskInfo { get; set; }
}
[DataContract(Namespace = "")]
public class RiskInfo
{
[DataMember(IsRequired = false, Name = "riskType")]
public string RiskType { get; set; }
[DataMember(IsRequired = false, Name = "riskDescription")]
public string RiskDescription { get; set; }
[DataMember(IsRequired = false, Name = "autoRisk")]
public AutoRiskEntity AutoRisk { get; set; }
[DataMember(IsRequired = false, Name = "dwellingRisk")]
public DwellingRiskEntity DwellingRisk { get; set; }
}
[DataContract(Namespace = "")]
public class DwellingRiskEntity
{
[DataMember(IsRequired = false, Name = "location")]
public string Location { get; set; }
}
[DataContract(Namespace = "")]
public class AutoRiskEntity
{
[DataMember(IsRequired = false, Name = "vin")]
public string Vin { get; set; }
[DataMember(IsRequired = false, Name = "make")]
public string Make { get; set; }
[DataMember(IsRequired = false, Name = "model")]
public string Model { get; set; }
[DataMember(IsRequired = false, Name = "licensePlate")]
public string LicensePlate { get; set; }
[DataMember(IsRequired = false, Name = "year")]
public string Year { get; set; }
}
这将创建以下 XML
<riskInfoList>
<riskCount></riskCount>
<riskInfo>
<!--Zero or more repetitions:-->
<riskInfo>
<autoRisk>
<licensePlate>?</licensePlate>
<make>?</make>
<model>?</model>
<vin>?</vin>
<year>?</year>
</autoRisk>
<dwellingRisk>
<location>?</location>
</dwellingRisk>
<riskDescription>?</riskDescription>
<riskType>?</riskType>
</riskInfo>
</riskInfo>
</riskInfoList>
但我想要的是:
<riskInfoList>
<riskCount>?</riskCount>
<!--Zero or more repetitions:-->
<riskInfo>
<autoRisk>
<licensePlate>?</licensePlate>
<make>?</make>
<model>?</model>
<vin>?</vin>
<year>?</year>
</autoRisk>
<dwellingRisk>
<location>?</location>
</dwellingRisk>
<riskDescription>?</riskDescription>
<riskType>?</riskType>
</riskInfo>
</riskInfoList>
我想摆脱 riskInfo 重复根。我试图通过消除RiskInfoList 类来更改字段定义,并将carddefinition 类中的RiskInfoList 字段直接更改为RiskInfo 列表。这按照我的意愿呈现了 xml,但是我不能包含 riskCount 元素,因为它需要处于 riskinfolist 级别。
我该如何补救?
【问题讨论】:
-
不幸的是,
DataContractSerializer要求对集合使用外部元素;见Data Contract Serializer - How to omit the outer element of a collection 和WCF DataMember List<> without enclosing element 基本上说你必须切换到XmlSerializer。
标签: c# xml wcf serialization