使用XmlSerializer将类成员序列化为通用字段列表可以一步完成吗?

问题描述

我正在与一种具有非常特殊的消息格式的服务进行交互。这是一个示例:

<Response>
    <Status>Success</Status>
    <Authentication>
        <Status>Success</Status>
        <Token>12345</Token>
    </Authentication>
    <Field key="Name">Test</Field>
    <Field key="Number">123</Field>
    <Field key="PrimaryCustomer">
        <Customer>
            <Name>SomeCustomer</Name>
            <PhoneNumber>12345678</PhoneNumber>
        </Customer>
    </Field>
    ...
    <Field key="..."/>
    <Field key="..."/>
    <Field key="..."/>
    <Field key="..."/>
    <Field key="..."/>
    <Field key="..."/>
    <Field key="..."/>
    ...
</Response>

如您所见,它有一长串所谓的“字段”,其中“ key”属性是字段的名称(基本上),节点的内容是值。内容可以是任何类型,范围从基元到复杂对象。

我想将此结构映射到更简洁的模型中。类似于以下内容

public class Response
{
    public StatusEnum Status { get; set; }

    public Authentication Authentication { get; set; }

    public string Name { get; set; }

    public int Number { get; set; }

    public Customer PrimaryCustomer { get; set; }

    // Other strongly typed properties here
    // ...
}

我看到的唯一类似的方法是字典,我不想使用它,因为它需要一个中介模型才能从干净的模型映射到带有字典的模型,然后再映射到XML。

我看到的另一件事是XmlChoiceIdentifier,它允许基于枚举属性自定义节点的可能值,但它实际上并不适合这种情况。

由于我必须使用这种结构对模型进行序列化和反序列化,因此,如果有一种方法可以干净地对其进行建模以与XmlSerializer一起使用而无需额外的转换步骤,那将是非常有益的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)