10

Json.NET を使用して、いくつかのエンティティ クラスを JSON にシリアル化する必要があります。プロパティの名前をカスタマイズするために、次の[JsonProperty]ような属性を使用します。

    [JsonProperty("lastName")]
    public string LastName { get; set; }

問題は、エンティティに JSON 関連の属性を含めたくないということです...エンティティが乱雑にならないように、何らかの方法で注釈を外部化する方法はありますか?

を使えば、クラスXmlSerializerで簡単にできます。XmlAttributeOverridesJson.NET に似たものはありますか?

4

1 に答える 1

9

JsonPropertyはい、カスタム コントラクト リゾルバーを作成し、属性を使用せずに定義をカスタマイズできます。例は次のとおりです。

class Person { public string First { get; set; } }

class PersonContractResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(
        MemberInfo member, 
        MemberSerialization memberSerialization)
    {
        var property = base.CreateProperty(member, memberSerialization);

        if (member.DeclaringType == typeof(Person) && member.Name == "First")
        {
            property.PropertyName = "FirstName";
        }

        return property;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var result = JsonConvert.SerializeObject(
            new Person { First = "John" },
            new JsonSerializerSettings 
            { 
                ContractResolver = new PersonContractResolver() 
            });

        Console.WriteLine(result);
    }
}

このサンプル プログラムの出力は次のようになります。

// {"FirstName":"John"}
于 2012-08-09T10:16:28.483 に答える