Class Any
Any
contains an arbitrary serialized protocol buffer message along with a
URL that describes the type of the serialized message.
Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type.
Example 1: Pack and unpack a message in C++.
Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... }
Example 2: Pack and unpack a message in Java.
Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); }
Example 3: Pack and unpack a message in Python.
foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ...
Example 4: Pack and unpack a message in Go
foo := &pb.Foo{...} any, err := ptypes.MarshalAny(foo) ... foo := &pb.Foo{} if err := ptypes.UnmarshalAny(any, foo); err != nil { ... }
The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example "foo.bar.com/x/y.z" will yield type name "y.z".
JSON
The JSON representation of an Any
value uses the regular
representation of the deserialized, embedded message, with an
additional field @type
which contains the type URL. Example:
package google.profile; message Person { string first_name = 1; string last_name = 2; }
{ "@type": "type.googleapis.com/google.profile.Person", "firstName": <string>, "lastName": <string> }
If the embedded message type is well-known and has a custom JSON
representation, that representation will be embedded adding a field
value
which holds the custom JSON in addition to the @type
field. Example (for message [google.protobuf.Duration][]):
{ "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" }
Inheritance
Inherited Members
Namespace: Google.Protobuf.WellKnownTypes
Assembly: Google.Protobuf.dll
Syntax
public sealed class Any : IMessage<Any>, IMessage, IEquatable<Any>, IDeepCloneable<Any>
Constructors
Any()
Declaration
public Any()
Any(Any)
Declaration
public Any(Any other)
Parameters
Type | Name | Description |
---|---|---|
Any | other |
Fields
TypeUrlFieldNumber
Field number for the "type_url" field.
Declaration
public const int TypeUrlFieldNumber = 1
Field Value
Type | Description |
---|---|
System.Int32 |
ValueFieldNumber
Field number for the "value" field.
Declaration
public const int ValueFieldNumber = 2
Field Value
Type | Description |
---|---|
System.Int32 |
Properties
Descriptor
Declaration
public static MessageDescriptor Descriptor { get; }
Property Value
Type | Description |
---|---|
MessageDescriptor |
Parser
Declaration
public static MessageParser<Any> Parser { get; }
Property Value
Type | Description |
---|---|
MessageParser<Any> |
TypeUrl
A URL/resource name that uniquely identifies the type of the serialized
protocol buffer message. This string must contain at least
one "/" character. The last segment of the URL's path must represent
the fully qualified name of the type (as in
path/google.protobuf.Duration
). The name should be in a canonical form
(e.g., leading "." is not accepted).
In practice, teams usually precompile into the binary all types that they
expect it to use in the context of Any. However, for URLs which use the
scheme http
, https
, or no scheme, one can optionally set up a type
server that maps type URLs to message definitions as follows:
- If no scheme is provided,
https
is assumed. - An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error.
- Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.)
Note: this functionality is not currently available in the official protobuf release, and it is not used for type URLs beginning with type.googleapis.com.
Schemes other than http
, https
(or the empty scheme) might be
used with implementation specific semantics.
Declaration
public string TypeUrl { get; set; }
Property Value
Type | Description |
---|---|
System.String |
Value
Must be a valid serialized protocol buffer of the above specified type.
Declaration
public ByteString Value { get; set; }
Property Value
Type | Description |
---|---|
ByteString |
Methods
CalculateSize()
Declaration
public int CalculateSize()
Returns
Type | Description |
---|---|
System.Int32 |
Implements
Clone()
Declaration
public Any Clone()
Returns
Type | Description |
---|---|
Any |
Implements
Equals(Any)
Declaration
public bool Equals(Any other)
Parameters
Type | Name | Description |
---|---|---|
Any | other |
Returns
Type | Description |
---|---|
System.Boolean |
Implements
Equals(Object)
Declaration
public override bool Equals(object other)
Parameters
Type | Name | Description |
---|---|---|
System.Object | other |
Returns
Type | Description |
---|---|
System.Boolean |
Overrides
GetHashCode()
Declaration
public override int GetHashCode()
Returns
Type | Description |
---|---|
System.Int32 |
Overrides
GetTypeName(String)
Retrieves the type name for a type URL, matching the FullName of the packed message type.
Declaration
public static string GetTypeName(string typeUrl)
Parameters
Type | Name | Description |
---|---|---|
System.String | typeUrl | The URL to extract the type name from |
Returns
Type | Description |
---|---|
System.String | The type name |
Remarks
This is always just the last part of the URL, after the final slash. No validation of anything before the trailing slash is performed. If the type URL does not include a slash, an empty string is returned rather than an exception being thrown; this won't match any types, and the calling code is probably in a better position to give a meaningful error.
There is no handling of fragments or queries at the moment.
Is(MessageDescriptor)
Returns a bool indictating whether this Any message is of the target message type
Declaration
public bool Is(MessageDescriptor descriptor)
Parameters
Type | Name | Description |
---|---|---|
MessageDescriptor | descriptor | The descriptor of the message type |
Returns
Type | Description |
---|---|
System.Boolean |
|
MergeFrom(CodedInputStream)
Declaration
public void MergeFrom(CodedInputStream input)
Parameters
Type | Name | Description |
---|---|---|
CodedInputStream | input |
Implements
MergeFrom(Any)
Declaration
public void MergeFrom(Any other)
Parameters
Type | Name | Description |
---|---|---|
Any | other |
Implements
Pack(IMessage)
Packs the specified message into an Any message using a type URL prefix of "type.googleapis.com".
Declaration
public static Any Pack(IMessage message)
Parameters
Type | Name | Description |
---|---|---|
IMessage | message | The message to pack. |
Returns
Type | Description |
---|---|
Any | An Any message with the content and type URL of |
Pack(IMessage, String)
Packs the specified message into an Any message using the specified type URL prefix.
Declaration
public static Any Pack(IMessage message, string typeUrlPrefix)
Parameters
Type | Name | Description |
---|---|---|
IMessage | message | The message to pack. |
System.String | typeUrlPrefix | The prefix for the type URL. |
Returns
Type | Description |
---|---|
Any | An Any message with the content and type URL of |
ToString()
Declaration
public override string ToString()
Returns
Type | Description |
---|---|
System.String |
Overrides
TryUnpack<T>(out T)
Attempts to unpack the content of this Any message into the target message type, if it matches the type URL within this Any message.
Declaration
public bool TryUnpack<T>(out T result)
where T : IMessage, new()
Parameters
Type | Name | Description |
---|---|---|
T | result |
Returns
Type | Description |
---|---|
System.Boolean |
|
Type Parameters
Name | Description |
---|---|
T | The type of message to attempt to unpack the content into. |
Unpack<T>()
Unpacks the content of this Any message into the target message type, which must match the type URL within this Any message.
Declaration
public T Unpack<T>()
where T : IMessage, new()
Returns
Type | Description |
---|---|
T | The unpacked message. |
Type Parameters
Name | Description |
---|---|
T | The type of message to unpack the content into. |
Exceptions
Type | Condition |
---|---|
InvalidProtocolBufferException | The target message type doesn't match the type URL in this message |
WriteTo(CodedOutputStream)
Declaration
public void WriteTo(CodedOutputStream output)
Parameters
Type | Name | Description |
---|---|---|
CodedOutputStream | output |
Implements
Explicit Interface Implementations
IMessage.Descriptor
Declaration
MessageDescriptor IMessage.Descriptor { get; }
Returns
Type | Description |
---|---|
MessageDescriptor |