簡體   English   中英

我可以在C#中的JsonProperty屬性中使用資源字符串嗎?

[英]Can I use Resource Strings in a JsonProperty Attribute in C#?

我正在連接到可能在未來幾個月內顯着修改的API,並希望將相關的API標記存儲在資源中,以確保在發生更改時可以輕松更新它們。

但是,當我嘗試在JsonProperty(通過Newtonsoft)屬性中使用這些資源字符串時,我遇到以下錯誤:

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

我已經嘗試創建自定義屬性來解決問題,但JsonProperty本身是密封的並且是不可繼承的。

我有合理的方法來解決這個問題嗎? 我只是錯過了一些東西嗎?

JsonPropertyAttribute控制如何將類序列化為JSON並返回。 如果您在資源文件中定義了實際的json屬性名稱,那么將序列化類的方式將隨着這些資源文件的更新而更改,或者即使您的應用程序只是切換到其他語言環境也是如此。 這通常不是一個好主意。

但是,如果您的程序變化如此頻繁,以至於您希望能夠在不重新編譯的情況下修改類的序列化,或者您希望有多種方法來序列化類,我相信您必須編寫自己的IContractResolver

這是一個例子:

public class ResourceNameContractResolver : 
    CamelCasePropertyNamesContractResolver
{
    protected override IList<JsonProperty> CreateProperties CreatePropertiesInternal(Type type, MemberSerialization memberSerialization)
    {
        var list = base.CreateProperties(type, memberSerialization)
        foreach (JsonProperty p in list)
        {
            p.PropertyName = this.GetRealNameFromResourceFile(p.PropertyName);
        }

        return list;
    }

    private string GetRealNameFromResourceFile(string originalPropertyName)
    {
        // Look up name from resource file
    }
}

並使用這個類

var settings = new JsonSerializerSettings()
{
     ContractResolver = new ResourceNameContractResolver()
};
JsonTextWriter writer = new JsonTextWriter(...);
JsonSerializer serializer = JsonSerializer.Create(settings);
serializer.Serialize(writer, myData);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM