将输入字段映射到新的输出字段,以便在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连接来实现映射?
如果您有一个固定的映射集,您可以使用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将用于在序列化时显示具有自定义属性名称的数据。