相关疑难解决方法(0)

C#序列化私有类成员

class Person
{
    public string m_name;
    private int m_age; // << how do I serialize the darn little rat?
}
Run Code Online (Sandbox Code Playgroud)

简单的问题,但在尝试回答它时似乎是一个很大的混乱.
每个人都建议使用公共getter/setter,但我的应用程序太大,为每个成员制作一个getter/setter只会导致可维护性问题.

我是否被迫在这里创建自定义序列化,或者这些成员是否有魔术属性?
如何序列化私有类成员?

编辑#1:
大家好,对不起来感到抱歉,当我写这个问题时,我有点不高兴,试图找到解决方案几个小时后.
无论如何,这里有更多的事实:
1.我正在尝试XML序列化这个类.目前我正在使用System.Xml.Serialization.XmlSerializer.
2.我正在序列化为XML以获得版本兼容性,据我所知,二进制文件不能提供给我.
我希望有一个属性,如:

class Person
{
    public string m_name;
    [SerializeThat(ElementName="Age")]
    private int m_age; // << how do I serialize the darn little rat?
}
Run Code Online (Sandbox Code Playgroud)

或者(继续事实#3)一个属于该类属性,如下所示:

[Serializable(DoPrivate = true, DoProtected = true)]
class Person
{
    public string m_name;
    private int m_age; …
Run Code Online (Sandbox Code Playgroud)

c# serialization

35
推荐指数
4
解决办法
5万
查看次数

为什么必须使用[serializable]属性标记一个类?

看到您可以将任何文档转换为字节数组并将其保存到磁盘,然后将文件重建为其原始格式(只要您的文件名包含元数据等).

你为什么要用等级来标记一个班级[Serializable]?这是一个相同的想法,"元数据"类型信息,所以当你将对象转换为它的类时,事物是否正确映射?

c# serialization attributes serializable

15
推荐指数
2
解决办法
1万
查看次数

如何使用PostSharp属性注入属性?

如何编写PostSharp方面以将属性应用于类?我正在考虑的场景是需要使用DataContract属性进行修饰的WCF实体(或域对象).它也应该有一个Namespace属性.像这样:

using System.Runtime.Serialization;

namespace MWS.Contracts.Search.V1
{
    namespace Domain
    {
        [DataContract(Namespace = XmlNamespaces.SchemaNamespace)]
        public class PagingContext
        {
            [DataMember]
            public int Page { get; set; }

            [DataMember]
            public int ResultsPerPage { get; set; }

            [DataMember]
            public int MaxResults { get; set; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,您可以看到我想要输出的样子.它具有应用于类的DataContract属性.手工完成这项工作既乏味又不独特.我真的只想编写一个可以应用于我的"域"命名空间的方面.然后它将为我应用序列化相关属性.这样我就可以专注于开发实体对象,而不用担心序列化的细节.

我在PostSharp的网站上找到了用于在方法之前,之后和代替方法注入代码的文档.然而,我正在寻找的是一种将属性注入类型的方法.


这是解决方案!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using PostSharp.Aspects;
using PostSharp.Extensibility;
using PostSharp.Reflection;

namespace MWS.Contracts.Aspects
{
    // We set up multicast inheritance so  the aspect is automatically …
Run Code Online (Sandbox Code Playgroud)

.net c# aop postsharp

7
推荐指数
1
解决办法
4604
查看次数

为什么不需要将类标记为要序列化的[DataContract]或[Serializable]属性?

Microsoft在其文章" 如何使用Visual C#将对象序列化为XML "中提供了代码.

using System;

public class clsPerson
{
  public  string FirstName;
  public  string MI;
  public  string LastName;
}

class class1
{ 
   static void Main(string[] args)
   {
      clsPerson p=new clsPerson();
      p.FirstName = "Jeff";
      p.MI = "A";
      p.LastName = "Price";
      XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
      x.Serialize(Console.Out, p);
      Console.WriteLine();
      Console.ReadLine();
   }
}    
Run Code Online (Sandbox Code Playgroud)

但是,为什么类clsPerson不需要用[DataContract]或[Serializable]属性标记?

c# serialization

2
推荐指数
1
解决办法
3881
查看次数

标签 统计

c# ×4

serialization ×3

.net ×1

aop ×1

attributes ×1

postsharp ×1

serializable ×1