![](/img/trans.png)
[英]How can I access the value of a variable using it's JsonProperty attribute in a C# class?
[英]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.