如何添加字段别名映射以进行反序列化

时间:2019-04-23 00:38:20

标签: php symfony deserialization

我是对象序列化的新手,在尝试弄清楚如何/在对象字段和CSV标头之间插入映射时遇到麻烦。

我目前正在创建CSV上传表单,并尝试使用CSVEncoder将CSV行反序列化为对象数组。

现在,当标头很完美时,这可以工作,但是我希望将某种标头映射添加到CSVEncoder中,以将标头映射到字段。

示例

class Person
{
    public $name;
    public $age;
    public $email;
}

如下所示的CSV标头将完美地映射行

'name,age,email'

但是我想添加某种映射,以允许诸如此类的标头也映射到适当的字段

'full name,aged,email address'

参考: https://symfony.com/doc/current/components/serializer.html

也许我的谷歌搜索技能不是很好,因为我认为这在尝试反序列化CSV时很常见。

我确实有一个非序列化的版本,该版本可以读取文件并将行转换为对象,但是速度非常慢,我想通过“适当”的操作来改进此代码(以及我的技能)。

在另一个版本中,我读取了标题行,将其与映射正确标题和可接受别名的数组的关联数组进行比较,然后用适当的标题重写标题。

在将文件传递给CSVEncoder之前,我可以再次执行此操作,但我想知道是否有更好的方法来减轻这种麻烦。

欢呼

1 个答案:

答案 0 :(得分:1)

您应使用NameConverter,选中此https://symfony.com/doc/current/components/serializer.html#converting-property-names-when-serializing-and-deserializing

因此,您的名称转换器可能如下所示:

<DataGrid x:Name="winDataTable" Grid.Row="2" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" HeadersVisibility="Column"
                      IsReadOnly="True" SelectionMode="Single" AutoGenerateColumns="True"
                      ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"
                      ScrollViewer.HorizontalScrollBarVisibility="Auto" 
                      ItemsSource="{Binding Path=SelectedFeatureDataTable, Mode=OneWay}">

,您应该这样使用它:

public DataTable SelectedFeatureDataTable
    {
        get
        {
            return _selectedFeaturesDataTable;
        }
        set
        {
           SetProperty(ref _selectedFeaturesDataTable, value, () => SelectedFeatureDataTable);

        }
    }

我没有测试代码,但是类似的东西应该可以工作:)