gpt4 book ai didi

.net - 序列化为 XML - 私有(private)属性

转载 作者:行者123 更新时间:2023-12-01 00:06:04 24 4
gpt4 key购买 nike

我正在寻找一种方法来序列化包含一些只读属性的 POCO。在一些 Google 和 StackOverflow 搜索中,我看到了以下建议:

  • 使用 DataContractSerializer ;或
  • 使用 肥皂格式化程序 二进制格式化程序 ;或
  • 替换我的只读属性读/写属性 ;

  • 我的类(class)非常简单,它们看起来像:
    public class MyClass
    {
    public int Id { get; private set; }
    public string Name { get; private set; }
    public MyClass(int id, string name)
    {
    Id = id;
    Name = name;
    }
    }

    所以,
  • 我不想让我的属性读/写。如果它们是只读的,那是因为我的域模型要求只读属性。领域模型不能因此而改变。
  • 我不想使用 DataContractSerializer ,因为这会用与序列化相关的东西污染我的域模型。
  • BinaryFormatter不是一个很好的选择,因为结果是 byte[] , 我想把它当作 string (我不想在反序列化我的对象时处理 Encondings 等)。

  • 我真正想要的是 能够序列化只读属性的 XmlSerializer 类 .

    你知道任何这样的实现吗?或者任何其他方便的解决方案?

    谢谢!

    最佳答案

    好吧,通常 XmlSerializer无法序列化只读属性...但是可以使用内部集序列化属性:您需要生成 XML 序列化程序集,并使用 InternalsVisibleTo 将其声明为“ friend ”程序集属性。您可以通过将以下代码添加到项目文件来自动执行此操作:

      <Target Name="AfterBuild"
    DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource"
    Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)"
    Outputs="$(OutputPath)$(_SGenDllName)">
    <SGen BuildAssemblyName="$(TargetFileName)"
    BuildAssemblyPath="$(OutputPath)"
    References="@(ReferencePath)"
    ShouldGenerateSerializer="true"
    UseProxyTypes="false"
    KeyContainer="$(KeyContainerName)"
    KeyFile="$(KeyOriginatorFile)"
    DelaySign="$(DelaySign)"
    ToolPath="$(SGenToolPath)">
    <Output TaskParameter="SerializationAssembly"
    ItemName="SerializationAssembly" />
    </SGen>
    </Target>

    在 AssemblyInfo.cs 中:
    [assembly: InternalsVisibleTo("MyAssembly.XmlSerializers")]

    当然,您可能不希望属性具有内部集,但如果您这样做,上述解决方案应该可以工作。

    关于.net - 序列化为 XML - 私有(private)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1347102/

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