2

私が取り組んでいるプロジェクト(C#)では、シリアライズされたオブジェクトのメソッドも含むJSON表現を使用する必要があります。これが、独自のシリアライザーを実装する必要がある理由です。シリアライザーは、リフレクションを使用して非常に簡単に実装されます。私の問題は、元のオブジェクトと同じタイプの「自己作成」プロパティを持つオブジェクトも処理できる必要があることです。

例:

class ClassA  
{  
    private ClassA a;
    public ClassA A  
    {  
        get
        {
            if (a == null)
                a = new ClassA();
            return a;  
        }  
    }  
}

Properties を反復処理するたびに、新しいオブジェクト ( a ) が作成されます。このようにして、Serializer は無限再帰になります。

これを回避する方法はありますか?任意の提案をいただければ幸いです。

4

1 に答える 1

0

シリアル化中に触れたくないプロパティをマークする属性を作成します。その属性のないプロパティのみをシリアル化します。

[AttributeUsage(AttributeTargets.Property)]
public class DoNotSerializeAttribute : Attribute
{
}

使用法:

class ClassA
{
    private ClassA a;

    [DoNotSerialize]
    public ClassA A
    {
        get
        {
            if (a == null)
                a = new ClassA();
            return a;
        }
    }
}

シリアル化するプロパティを決定する場合:

var properties = theType.GetProperties()
     .Where(x => x.GetCustomAttributes(typeof (DoNotSerializeAttribute), true).Length == 0);

クラスを変更できない場合は、次のように、除外するプロパティの明示的なリストを渡すことができます。

PropertyInfo[] exclude = new[]{ typeof(ClassA).GetProperty("A") };    
var properties = typeof(ClassA).GetProperties().Except(exclude);
于 2013-02-14T13:38:48.850 に答える