C# 自定义XSD类型的Xml序列化
我有一个C#级成员,像这样:C# 自定义XSD类型的Xml序列化,c#,.net,xml,xml-serialization,C#,.net,Xml,Xml Serialization,我有一个C#级成员,像这样: class Case { string ID; string JurisdictionID; } 相应的XSD如下所示: <xs:element name="CaseTrackingID" type="IDType"/> <xs:complexType name="IDType"> <xs:sequence> <xs:element name="ID" type="xs:string"/>
class Case
{
string ID;
string JurisdictionID;
}
相应的XSD如下所示:
<xs:element name="CaseTrackingID" type="IDType"/>
<xs:complexType name="IDType">
<xs:sequence>
<xs:element name="ID" type="xs:string"/>
<xs:element name="IDJurisdictionText" type="xs:string" minOccurs="0"/>
<xs:element name="IDType" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
我该如何注释我的类,以便CaseTrackingID\ID
映射到Case.ID
和CaseTrackingID\idJudictionContext
映射到Case.JudictionId
?尝试以下方法:
[XmlRoot("CaseTrackingID")]
public class Case
{
[XmlElement("ID")]
public string ID;
[XmlElement("IDJurisdictionText")]
public string JurisdictionID;
}
当模式和类结构不完全一致时,您有两个选项,但没有一个这么好
public class Case
{
[XmlIgnore] public string ID;
[XmlIgnore] public string JuristictionID;
[XmlElement("CaseTrackingID")]
public CaseTrackingID SerializedCaseTrackingID
{
get
{
return new CaseTrackingID
{
ID = this.ID,
JuristictionID = this.JuristictionID,
};
}
set
{
this.ID = value.ID;
this.JuristictionID = value.JuristictionID;
}
}
}
public class CaseTrackingID
{
[XmlElement("ID")]
public string ID;
[XmlElement("IDJurisdictionText")]
public string JurisdictionID;
}
或者,如果您使用的是DCSerializer,则可以使用代理功能(http://msdn.microsoft.com/en-us/library/ms733064.aspx)在序列化时替换不同的类结构。元素实际上是
元素的子元素,因此我不能按建议注释我的Case
类。@Jeff Swensen,以及CaseTrackingID
在您的类中是如何表示的?CaseTrackingID没有表示。我正在尝试将序列化注释应用于与数据库表匹配的代码优先EF类。@Jeff Swensen,根据提供的架构,您的XML应该如下所示:
。哪里是Case
element?@Jeff Swensen,为部分架构提供Case
element。“xsd.exe/c myschema.xsd”将生成一个标记类,您可以将其用作基础。