Überschreiben von JsonPropertyAttribute
bei Verwendung von Json.NET für die JSON-Serialisierung Im Szenario der JSON-Serialisierung mit ASP.Net MVC und Json.Net ist es sehr effektiv, das [JsonProperty(PropertyName = "shortName")]
-Attribut zu verwenden, um die Nutzlastgröße zu optimieren. Dieser Ansatz ist nützlich, wenn der Empfänger eine andere .Net-Anwendung oder ein anderer .Net-Dienst ist, da die Deserialisierung die Objekthierarchie unter Verwendung der ursprünglichen Eigenschaftsnamen neu zusammensetzt und gleichzeitig die Nutzlastgröße minimiert.
Allerdings treten Probleme auf, wenn der Client eine JavaScript- oder Ajax-Anwendung ist, auf die über einen Browser zugegriffen wird. Der Client erhält JSON mit verkürzten Eigenschaftsnamen, was eine optimale Nutzung verhindert. In diesem Artikel wird untersucht, wie Sie das Attribut [JsonProperty(PropertyName = "shortName")]
während der JSON-Serialisierung programmgesteuert umgehen können.
Zu diesem Zweck ist die Verwendung eines benutzerdefinierten Vertragsparsers die beste Lösung. Hier ist die Umsetzung:
<code class="language-csharp">public class LongNameContractResolver : DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { // 使用基类生成具有简短名称的JsonProperty IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization); // 将简短名称替换为原始属性名称 foreach (JsonProperty property in properties) { property.PropertyName = property.UnderlyingName; } return properties; } }</code>
Durch die Integration eines benutzerdefinierten Parsers können Sie das Serialisierungsverhalten einfach steuern. Seine Wirksamkeit ist wie folgt:
<code class="language-csharp">public class Program { public static void Main(string[] args) { Foo foo = new Foo { CustomerName = "Bubba Gump Shrimp Company", CustomerNumber = "BG60938" }; Console.WriteLine("--- 使用JsonProperty名称 ---"); Console.WriteLine(Serialize(foo, false)); Console.WriteLine(); Console.WriteLine("--- 忽略JsonProperty名称 ---"); Console.WriteLine(Serialize(foo, true)); } public static string Serialize(object obj, bool useLongNames) { JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Formatting = Formatting.Indented; if (useLongNames) { settings.ContractResolver = new LongNameContractResolver(); } return JsonConvert.SerializeObject(obj, settings); } }</code>
Ausgabe:
<code class="language-json">--- 使用JsonProperty名称 --- { "cust-num": "BG60938", "cust-name": "Bubba Gump Shrimp Company" } --- 忽略JsonProperty名称 --- { "CustomerNumber": "BG60938", "CustomerName": "Bubba Gump Shrimp Company" }</code>
Das obige ist der detaillierte Inhalt vonWie überschreibe ich das JsonProperty-Attribut während der JSON-Serialisierung mit Json.NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!