如何实现所需的 XML 序列化?
How to achieve the required XML serialisation?
以下class:
public class CodelistFilters
{
[System.Xml.Serialization.XmlArray]
public List<CodelistFilterAndElement> AndGroup;
}
public class CodelistFilterAndElement
{
[System.Xml.Serialization.XmlArray]
public List<CodelistFilterOrElement> OrGroup;
[System.Xml.Serialization.XmlAttribute]
public string Relationship { get { return "And"; } }
}
public class CodelistFilterOrElement
{
[System.Xml.Serialization.XmlElement]
public List<CodelistFilter> CodelistFilters;
[System.Xml.Serialization.XmlAttribute]
public string Relationship { get { return "Or"; } }
}
public class CodelistFilter
{
[System.Xml.Serialization.XmlAttribute]
public string Name { get; set; }
[System.Xml.Serialization.XmlAttribute]
public string Value1 { get; set; }
[System.Xml.Serialization.XmlAttribute]
public string Value2 { get; set; }
}
序列化为
<CodelistFilters xmlns:xsi="http://www.w3.org/2001/XMLSchema">
<AndGroup>
<CodelistFilterAndElement>
<OrGroup>
<CodelistFilterOrElement>
<CodelistFilters>
<CodelistFilter Name="Description" Value1="test" />
</CodelistFilters>
</CodelistFilterOrElement>
</OrGroup>
</CodelistFilterAndElement>
</AndGroup>
我有点明白了。但是,我正在努力实现这一目标:
<CodelistFilters xmlns:xsi="http://www.w3.org/2001/XMLSchema">
<Group Relationship="And">
<Group Relationship="Or">
<CodelistFilters Name="Description" Value1="test" />
</Group>
</Group>
我应该如何构建我的 C# class 来实现这一点?我试过弄乱 XmlAttributes 和嵌套列表,但最终得到了 "wrong".
的不同版本
正如评论中所暗示的,您需要在 XML 和 类 之间建立一个 1:1 映射。你需要的 XML 中只有 3 个元素,所以你需要 3 个 类 来表示这些。
public class CodelistFilters
{
[XmlElement("Group")]
public List<Group> Groups { get; set; }
}
public class Group
{
[XmlAttribute]
public string Relationship { get; set; }
[XmlElement("Group")]
public List<Group> Groups { get; set; }
[XmlElement("CodelistFilter")]
public List<CodelistFilter> CodelistFilters { get; set; }
}
public class CodelistFilter
{
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public string Value1 { get; set; }
[XmlAttribute]
public string Value2 { get; set; }
}
有关工作演示,请参阅 this fiddle。
以下class:
public class CodelistFilters
{
[System.Xml.Serialization.XmlArray]
public List<CodelistFilterAndElement> AndGroup;
}
public class CodelistFilterAndElement
{
[System.Xml.Serialization.XmlArray]
public List<CodelistFilterOrElement> OrGroup;
[System.Xml.Serialization.XmlAttribute]
public string Relationship { get { return "And"; } }
}
public class CodelistFilterOrElement
{
[System.Xml.Serialization.XmlElement]
public List<CodelistFilter> CodelistFilters;
[System.Xml.Serialization.XmlAttribute]
public string Relationship { get { return "Or"; } }
}
public class CodelistFilter
{
[System.Xml.Serialization.XmlAttribute]
public string Name { get; set; }
[System.Xml.Serialization.XmlAttribute]
public string Value1 { get; set; }
[System.Xml.Serialization.XmlAttribute]
public string Value2 { get; set; }
}
序列化为
<CodelistFilters xmlns:xsi="http://www.w3.org/2001/XMLSchema">
<AndGroup>
<CodelistFilterAndElement>
<OrGroup>
<CodelistFilterOrElement>
<CodelistFilters>
<CodelistFilter Name="Description" Value1="test" />
</CodelistFilters>
</CodelistFilterOrElement>
</OrGroup>
</CodelistFilterAndElement>
</AndGroup>
我有点明白了。但是,我正在努力实现这一目标:
<CodelistFilters xmlns:xsi="http://www.w3.org/2001/XMLSchema">
<Group Relationship="And">
<Group Relationship="Or">
<CodelistFilters Name="Description" Value1="test" />
</Group>
</Group>
我应该如何构建我的 C# class 来实现这一点?我试过弄乱 XmlAttributes 和嵌套列表,但最终得到了 "wrong".
的不同版本正如评论中所暗示的,您需要在 XML 和 类 之间建立一个 1:1 映射。你需要的 XML 中只有 3 个元素,所以你需要 3 个 类 来表示这些。
public class CodelistFilters
{
[XmlElement("Group")]
public List<Group> Groups { get; set; }
}
public class Group
{
[XmlAttribute]
public string Relationship { get; set; }
[XmlElement("Group")]
public List<Group> Groups { get; set; }
[XmlElement("CodelistFilter")]
public List<CodelistFilter> CodelistFilters { get; set; }
}
public class CodelistFilter
{
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public string Value1 { get; set; }
[XmlAttribute]
public string Value2 { get; set; }
}
有关工作演示,请参阅 this fiddle。