gpt4 book ai didi

c# - Deep xml 序列化结构选项

转载 作者:太空狗 更新时间:2023-10-29 23:12:01 25 4
gpt4 key购买 nike

我有如下所示的类和结构。如果我将类序列化为正在使用 xmlserializer 我得到:

<测试>
< 测试编号 1 >5
<内测/>

使 InnerTest 正确序列化的最简单方法是什么(最好使用 xmlserializer)而不给 Number 属性一个二传手?

谢谢,尼克

public class Test 
{
private InnerTest innerTest;
private int testNumber;


public Test()
{
this.innerTest = new InnerTest();
this.testNumber = 5;
}


public int TestNumber1
{
get { return this.testNumber; }
set { this.testNumber = value;}
}


public InnerTest InnerTest
{
get { return this.innerTest; }
set { this.innerTest = value;}
}


}


public struct InnerTest
{
private int number;


public InnerTest(int number)
{
this.number = number;
}
public int Number{get { return number; }}
}

最佳答案

正如 Jon Skeet 非常正确地说的那样,如果您不想对属性进行公共(public)获取/设置,则需要将 IXmlSerializableXmlSerializer 一起使用因为它被设计为在部分信任的环境中工作,所以不会访问任何您无法访问的数据(回答他的最后一部分 - 是的,像 DateTime 这样的结构确实有明确的支持在那个序列化器中)。

根据您要实现的目标以及您使用的 .NET 版本,您可以考虑使用不需要公开内容的 DataContractSerializer(例如您可以将 DataMemberAttribute 放在私有(private)字段或具有公共(public) getter 和私有(private) setter 的属性上)。此序列化程序使您对 XML 格式的控制较少(实际上它非常有限制 - 例如,它甚至不支持属性!)但返回速度更快。

(我一直渴望结合这两者的东西,即 XmlSerializer 的灵 active 以及序列化私有(private)成员的能力,如 DataContractSerializer 但不幸的是没有目前只有一个。)

关于c# - Deep xml 序列化结构选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com