Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.Net中的XML序列化是否区分大小写?_.net_Xml Serialization - Fatal编程技术网

.Net中的XML序列化是否区分大小写?

.Net中的XML序列化是否区分大小写?,.net,xml-serialization,.net,Xml Serialization,我没有找到任何明确说明XML序列化是否区分大小写的文档 假设我有以下课程: class Test { public int Field; public string field; } 当XML序列化这个类时会有问题吗?因为它包含两个同名的字段,只是大小写不同而已 澄清:我知道有两个名称相同但大小写不同的字段是不好的,我不是在设计这样一个野兽。我正在与另一个人对我放任的野兽搏斗。简单的回答是,序列化保留了大小写,并且假设您将类公开,则该类将在C中成功序列化-照现在的情况,XmlSerialize

我没有找到任何明确说明XML序列化是否区分大小写的文档

假设我有以下课程:

class Test
{
public int Field;
public string field;
}
当XML序列化这个类时会有问题吗?因为它包含两个同名的字段,只是大小写不同而已


澄清:我知道有两个名称相同但大小写不同的字段是不好的,我不是在设计这样一个野兽。我正在与另一个人对我放任的野兽搏斗。

简单的回答是,序列化保留了大小写,并且假设您将类公开,则该类将在C中成功序列化-照现在的情况,XmlSerializer将阻止它

但是如果你不得不问这个问题,那么课堂设计就有严重的问题。有两个公共属性或字段,名称相同,大小写不同,每个属性或字段执行或影响不同的功能,这是一件非常可怕的事情。在这种情况下,字段甚至不是相同的类型

如果你下载了一个第三方库,它给了你这样一个类,你会怎么做?你怎么知道哪个是哪个?你会如何记录这一点,或者在文档中查找它?只是不要这样做-不要有两个成员,出于所有目的和意图,具有相同的名称。唯一的例外是公共财产的私人支持字段——在这种情况下,这两个字段密切相关,因此问题不大,尽管有些人仍然喜欢使用下划线作为前缀

正如John在评论中提到的,尽管C是区分大小写的,但其他.NET语言不是,因此您可以将其序列化为XML,但不能保证其他人能够将其反序列化到他们的环境中


重新考虑您的设计,这样它就不会有这样的类。

简单的回答是序列化保留大小写,并且如果您将类公开,则该类将在C中成功序列化-照现在的情况,XmlSerializer将阻塞它

但是如果你不得不问这个问题,那么课堂设计就有严重的问题。有两个公共属性或字段,名称相同,大小写不同,每个属性或字段执行或影响不同的功能,这是一件非常可怕的事情。在这种情况下,字段甚至不是相同的类型

如果你下载了一个第三方库,它给了你这样一个类,你会怎么做?你怎么知道哪个是哪个?你会如何记录这一点,或者在文档中查找它?只是不要这样做-不要有两个成员,出于所有目的和意图,具有相同的名称。唯一的例外是公共财产的私人支持字段——在这种情况下,这两个字段密切相关,因此问题不大,尽管有些人仍然喜欢使用下划线作为前缀

正如John在评论中提到的,尽管C是区分大小写的,但其他.NET语言不是,因此您可以将其序列化为XML,但不能保证其他人能够将其反序列化到他们的环境中


重新考虑您的设计,这样它就不会有这样的类。

这里更大的问题是您有公共字段,更不用说非公共类了,XML序列化程序不会喜欢它。是的,VB.NET程序也不会很喜欢您。任何必须维护该代码的人也不会这样做。解决方案:重命名其中一个字段。请参阅编辑文章中的说明。那么,.Net中的XML序列化是否区分大小写?相关:不要使用公共字段:公共字段和受保护字段版本不好,不受代码访问安全要求的保护。与其使用公共可见字段,不如使用私有字段并通过属性公开它们。这里更大的问题是您有公共字段,更不用说非公共类,XML序列化程序不会喜欢它。是的,VB.NET程序也不会很喜欢您。任何必须维护该代码的人也不会这样做。解决方案:重命名其中一个字段。请参阅编辑文章中的说明。那么,.Net中的XML序列化是否区分大小写?相关:不要使用公共字段:公共字段和受保护字段版本不好,不受代码访问安全要求的保护。与其使用公开可见的字段,不如使用私有字段并通过属性公开它们。我想我还应该指出,如果您遵循Microsoft的C/.NET编码约定,那么无论如何属性都将在PascalCase中,所以这种情况根本不会出现;以小写字符开头的公共类成员违反了惯例。请参阅编辑文章中的说明。那么,.Net中的XML序列化是否区分大小写呢?logicnp:文章的第一行说序列化程序保留大小写,应该可以很好地处理您的类。@logicnp:Theter
m区分大小写适用于如何读取或解析某些内容。正如第一段所述,XML序列化在输出上保留大小写,这意味着序列化XML中的大小写将与C中的大小写相同,最终将得到两个不同的XML元素,每个字段一个。尽管如此,即使您只是继承了这段代码而没有编写它,我还是会先修复这个类,然后再尝试对它进行任何处理,比如序列化;Visual Studio可以很快完成这项工作,并在整个解决方案中自动重命名,只需大约5秒钟的时间。我想我还应该指出,如果您遵循Microsoft的C/.NET编码约定,那么无论如何属性都将在PascalCase中,所以这种情况根本不会出现;以小写字符开头的公共类成员违反了惯例。请参阅编辑文章中的说明。那么,.Net中的XML序列化是否区分大小写呢?logicnp:文章的第一行说序列化程序保留大小写,应该可以很好地处理您的类。@logicnp:术语区分大小写适用于读取或解析内容的方式。正如第一段所述,XML序列化在输出上保留大小写,这意味着序列化XML中的大小写将与C中的大小写相同,最终将得到两个不同的XML元素,每个字段一个。尽管如此,即使您只是继承了这段代码而没有编写它,我还是会先修复这个类,然后再尝试对它进行任何处理,比如序列化;VisualStudio可以在短时间内完成这项工作,并在整个解决方案中自动化重命名,只需大约5秒钟的工作。