Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DataTable 序列化时,Row Cnt为零时不应作为空数据传递 #67

Open
hiouyuu opened this issue Sep 28, 2020 · 5 comments
Open

Comments

@hiouyuu
Copy link

hiouyuu commented Sep 28, 2020

DataTable即使行数为零,其列名仍然是有效数据。理论上序列化应该保留列名称及排序,而作为空数据传递会导致列名和数量产生错误的变化;

@andot
Copy link
Member

andot commented Oct 7, 2020

现在的这种做法是为了能够把 DataTable 这种数据传递给其它不支持 DataTable 的语言,所以转换为 List<T> 的格式来传递。如果作为一个特殊的类来处理的话,比如设置 3 个字段:namecolumnsrows,第一个字段为字符串,保存表名,第二个字段为 map,保存列名和类型,第三个字段为 list,保存行数据。这样的话,确实就可以解决你说的所有关于 DataTable 序列化和反序列化的问题。但是这样做的话,其它语言接受这个 DataTable 的数据时,就不能直接作为一个 List<T> 的数据来使用了。只能在其它语言中自定义一个按照上面说的结构体才能使用了,感觉这样做的话,跨语言使用就不方便了。

@hiouyuu
Copy link
Author

hiouyuu commented Oct 9, 2020

现在的这种做法是为了能够把 DataTable 这种数据传递给其它不支持 DataTable 的语言,所以转换为 List<T> 的格式来传递。如果作为一个特殊的类来处理的话,比如设置 3 个字段:namecolumnsrows,第一个字段为字符串,保存表名,第二个字段为 map,保存列名和类型,第三个字段为 list,保存行数据。这样的话,确实就可以解决你说的所有关于 DataTable 序列化和反序列化的问题。但是这样做的话,其它语言接受这个 DataTable 的数据时,就不能直接作为一个 List<T> 的数据来使用了。只能在其它语言中自定义一个按照上面说的结构体才能使用了,感觉这样做的话,跨语言使用就不方便了。

仍然觉得column name是有必要保留了。

DataTable是dotnet特有的数据类型,序列化首先应该保证dotnet上可以正常序列化及反序列化,由DataTable转换为List使用的频率应该不会很高。

@andot
Copy link
Member

andot commented Oct 10, 2020

嗯,可以再加一个序列化反序列化实现,想用哪种方式,就注册哪一种方式。

@hiouyuu
Copy link
Author

hiouyuu commented Jun 7, 2022

我魔改了Hprose.IO中DataTable序列化及反序列化。若DataTable为空,则序列化列名一致、首行内容为DataType名称的DataTable作为替代。反序列化遇到TableName含特定标志的DataTable时,则重新更改为正确DataTable。没有考虑其他语言的兼容性,只是暂时解决了这个问题。

@andot
Copy link
Member

andot commented Jun 8, 2022

嗯,其实不用改 Hprose.IO 的代码,只需要自己实现一个 DataTable 序列化反序列化,然后注册一下代替默认注册的序列化和反序列化就行了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants