Skip to content

Clarify JsonIgnore behavior for IsTargeted property in CoreActivity#349

Draft
Copilot wants to merge 4 commits intonext/core-api-clientsfrom
copilot/sub-pr-338
Draft

Clarify JsonIgnore behavior for IsTargeted property in CoreActivity#349
Copilot wants to merge 4 commits intonext/core-api-clientsfrom
copilot/sub-pr-338

Conversation

Copy link
Contributor

Copilot AI commented Feb 25, 2026

Addresses a review question about whether [JsonIgnore] on IsTargeted suppresses deserialization in addition to serialization.

Behavior

[JsonIgnore] with no condition defaults to JsonIgnoreCondition.Always — the property is excluded from both serialization and deserialization. This is intentional:

  • IsTargeted is not part of the BF Framework activity JSON schema; Teams never sends it in incoming webhook payloads
  • ConversationClient reads activity.IsTargeted before activity.ToJson() — the ?isTargetedActivity=true query parameter is appended to the URL, not the JSON body
  • For BF SDK compat (FromCompatActivity()), IsTargeted must be set manually after conversion — Microsoft.Bot.Schema.Activity has no equivalent concept
// IsTargeted controls the URL query param, not the JSON body
if (activity.IsTargeted)
    url += "?isTargetedActivity=true";

string body = activity.ToJson(); // isTargeted never appears here

The existing test IsTargeted_IsNotDeserializedFromJson explicitly validates this behavior.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

rido-min and others added 4 commits February 17, 2026 22:01
Introduces IsTargeted property to CoreActivity for private messages, updates ConversationClient to append isTargetedActivity query string for send/update/delete, and extends CoreActivityBuilder for targeted recipient support. Adds a "tm" command to send private messages to all members. Updates and adds tests for IsTargeted logic and ensures it is not serialized. Also updates .gitignore for .claude/.
Removed checks for Recipient Id and Name in several tests in CoreActivityBuilderTests.cs and CoreActivityTests.cs to streamline test coverage. Other test logic remains unchanged.
EchoBot now sends a "Hello TM !" message using TeamsBotApplication's ConversationClient after echoing the user's input. The TeamsActivity is built with correct conversation, recipient, sender, and service URL details. Minor formatting adjustment made in Program.cs with no logic changes.
Copilot AI changed the title [WIP] Update JsonIgnore handling for Reactions and TargetedMessage Clarify JsonIgnore behavior for IsTargeted property in CoreActivity Feb 25, 2026
@rido-min
Copy link
Member

@singhk97 yes, the JsonIgnore is intentional, for the next phase of Targeted Messages we will move the IsTargeted field to the Recipient, and I was planning to make it serializable at that point, so it can be used in the compat layer

Base automatically changed from next/core-api-clients-tm to next/core-api-clients March 4, 2026 05:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants