You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
For more information, see [Manipulate property order](../../../standard/serialization/system-text-json/use-dom.md#manipulate-property-order).
548
+
547
549
### Customize enum member names
548
550
549
551
The new <xref:System.Text.Json.Serialization.JsonStringEnumMemberNameAttribute?displayProperty=nameWithType> attribute can be used to customize the names of individual enum members for types that are serialized as strings:
Copy file name to clipboardExpand all lines: docs/framework/wcf/samples/weakly-typed-json-serialization-sample.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -53,7 +53,7 @@ public class PersonalInfo
53
53
54
54
This can be cumbersome, especially if the client has to handle more than one type of JSON object.
55
55
56
-
The `JsonObject` type provided by this sample introduces a weakly-typed representation of the deserialized JSON object. `JsonObject` relies on the natural mapping between JSON objects and .NET Framework dictionaries, and the mapping between JSON arrays and .NET Framework arrays. The following code shows the `JsonObject` type.
56
+
The `JsonObject` type provided by this sample introduces a weaklytyped representation of the deserialized JSON object. `JsonObject` relies on the natural mapping between JSON objects and .NET Framework dictionaries, and the mapping between JSON arrays and .NET Framework arrays. The following code shows the `JsonObject` type.
Copy file name to clipboardExpand all lines: docs/standard/serialization/system-text-json/custom-contracts.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -50,7 +50,7 @@ There are two ways to plug into customization. Both involve obtaining a resolver
50
50
The <xref:System.Text.Json.Serialization.Metadata.JsonTypeInfo.Kind?displayProperty=nameWithType> property indicates how the converter serializes a given type—for example, as an object or as an array, and whether its properties are serialized. You can query this property to determine which aspects of a type's JSON contract you can configure. There are four different kinds:
51
51
52
52
|`JsonTypeInfo.Kind`| Description |
53
-
| - | - |
53
+
|---------------------|-------------|
54
54
|<xref:System.Text.Json.Serialization.Metadata.JsonTypeInfoKind.Object?displayProperty=nameWithType>| The converter will serialize the type into a JSON object and uses its properties. **This kind is used for most class and struct types and allows for the most flexibility.**|
55
55
|<xref:System.Text.Json.Serialization.Metadata.JsonTypeInfoKind.Enumerable?displayProperty=nameWithType>| The converter will serialize the type into a JSON array. This kind is used for types like `List<T>` and array. |
56
56
|<xref:System.Text.Json.Serialization.Metadata.JsonTypeInfoKind.Dictionary?displayProperty=nameWithType>| The converter will serialize the type into a JSON object. This kind is used for types like `Dictionary<K, V>`. |
@@ -63,7 +63,7 @@ A modifier is an `Action<JsonTypeInfo>` or a method with a <xref:System.Text.Jso
63
63
The following table shows the modifications you can make and how to achieve them.
64
64
65
65
| Modification | Applicable `JsonTypeInfo.Kind`| How to achieve it | Example |
| Customize a property's value |`JsonTypeInfoKind.Object`| Modify the <xref:System.Text.Json.Serialization.Metadata.JsonPropertyInfo.Get?displayProperty=nameWithType> delegate (for serialization) or <xref:System.Text.Json.Serialization.Metadata.JsonPropertyInfo.Set?displayProperty=nameWithType> delegate (for deserialization) for the property. |[Increment a property's value](#example-increment-a-propertys-value)|
68
68
| Add or remove properties |`JsonTypeInfoKind.Object`| Add or remove items from the <xref:System.Text.Json.Serialization.Metadata.JsonTypeInfo.Properties?displayProperty=nameWithType> list. |[Serialize private fields](#example-serialize-private-fields)|
69
69
| Conditionally serialize a property |`JsonTypeInfoKind.Object`| Modify the <xref:System.Text.Json.Serialization.Metadata.JsonPropertyInfo.ShouldSerialize?displayProperty=nameWithType> predicate for the property. |[Ignore properties with a specific type](#example-ignore-properties-with-a-specific-type)|
@@ -114,7 +114,7 @@ Besides customizing a contract, there are other ways to influence serialization
114
114
- By modifying <xref:System.Text.Json.JsonSerializerOptions>, for example, to set a naming policy or serialize enumeration values as strings instead of numbers.
115
115
- By writing a custom converter that does the actual work of writing the JSON and, during deserialization, constructing an object.
116
116
117
-
Contract customization is an improvement over these pre-existing customizations because you might not have access to the type to add attributes, and writing a custom converter is complex and hurts performance.
117
+
Contract customization is an improvement over these pre-existing customizations because you might not have access to the type to add attributes. In addition, writing a custom converter is complex and hurts performance.
Copy file name to clipboardExpand all lines: docs/standard/serialization/system-text-json/use-dom.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -85,6 +85,14 @@ The following example illustrates the result of using methods that take a `JsonS
85
85
86
86
If you need features of `JsonSerializerOptions` other than custom converters, use `JsonSerializer` with strongly typed targets (such as the `Person` class in this example) rather than `JsonNode`.
87
87
88
+
### Manipulate property order
89
+
90
+
<xref:System.Text.Json.Nodes.JsonObject> is one of the elements in the payload of a <xref:System.Text.Json.Nodes.JsonNode>, and it represents a mutable JSON object. Even though the type is modelled as an `IDictionary<string, JsonNode>`, where each entry is a property of the object, it encapsulate an implicit property order. However, APIs such as <xref:System.Text.Json.Nodes.JsonObject.Insert(System.Int32,System.String,System.Text.Json.Nodes.JsonNode)> and <xref:System.Text.Json.Nodes.JsonObject.RemoveAt(System.Int32)> effectively model the type as an ordered dictionary by letting you insert and remove items at a specific index. These APIs allow modifications to object instances that can directly influence property order.
91
+
92
+
The following code shows an example of adding or moving a specific property to the start of the object.
To compare two `JsonNode` objects for equality, including their descendant elements, use the <xref:System.Text.Json.Nodes.JsonNode.DeepEquals(System.Text.Json.Nodes.JsonNode,System.Text.Json.Nodes.JsonNode)?displayProperty=nameWithType> method.
0 commit comments