将输入字段映射到新的输出字段,以便在c#中序列化

本文关键字:字段 序列化 输出 段映射 输入 | 更新日期: 2023-09-27 18:12:21

我在标题中提到了c#,但这是一个通用的编程问题。我只是想找到最好的方法来做以下事情:

我有一个tableA,它包含以下字段

ID : 1
ProjectName : "Test"
City : "NY"
Size : 100
Location : "USA"

现在我需要为第三方应用程序序列化该表,但是如果应用程序使用通用数据契约(见下文),并且必须稍微修改字段名称。因此,上面的表将按照如下方式序列化:

<Object>
<type>Project</type>
<Fields>
<Key>NameofProject</Key><Value>Test</value>
<Key>ProjectCity</Key><Value>NY</value>
<Key>ProjectLocation</Key><Value>USA</value>
</Fields>
</Object>

正如你所看到的,我需要将TableA中的字段映射到新的字段名/键:

ProjectName -> NameofProject
City -> ProjectCity
Location ->ProjectLocation

这就是我如何实现上述目标:创建一个映射表,存储如上所述的映射关系

InputField -> OutputKey
ProjectName -> NameofProject
City -> ProjectCity
Location ->ProjectLocation
I would then load the data from this table into a Set
I would then loop through each row of the input
- for each column in the row I would get the OutputKey based on the InputField as stored in my mapping Set, and build the xml

我认为在Set中存储少量信息,然后对每个字段进行查找应该不会太糟糕。但我不是一个有经验的c#用户,所以我想知道是否有更好的方法在c#中做到这一点。如有任何帮助或指导,我将不胜感激。

编辑:一个评论建议使用XSLT——这是一个好主意,但由于这项任务的其他复杂性,我最好基于数据契约在代码中构建xml。是否有任何方法通过输入数据表和映射表的sql连接来实现映射?

将输入字段映射到新的输出字段,以便在c#中序列化

如果您有一个固定的映射集,您可以使用DataContractSerializer或通过XmlSerializer完成此操作,然后使用不同的名称装饰成员,如以下示例所示。

前者使用DataContractSerializer,后者使用XmlSerializer

[DataContract]
public class Project
{
    [DataMember(Name = "NameOfTheProject")]
    public string ProjectName { get; set; }
    [DataMember(Name = "ProjectLocation")]
    public string Location { get; set; }
}
[Serializable]
public class Project1
{
    [System.Xml.Serialization.XmlAttribute(AttributeName = "ProjectName")]
    public string ProjName { get; set; }
}

正如我们在这里看到的那样,模型将模仿您的表结构,并且Attributes将用于在序列化时显示具有自定义属性名称的数据。