blob: 51751dc7f114e71b4d6f97e092f200c30132c425 [file]
<!doctype html><html lang=en-US dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-1.6.0 docs-doc-page docs-doc-id-object-serialization/csharp/schema-metadata" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.1"><title data-rh=true>Schema Metadata | Apache Fory™</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true property=og:url content=https://fory.apache.org/docs/object-serialization/csharp/schema-metadata /><meta data-rh=true property=og:locale content=en_US /><meta data-rh=true property=og:locale:alternate content=zh_CN /><meta data-rh=true name=docusaurus_locale content=en-US /><meta data-rh=true name=docsearch:language content=en-US /><meta data-rh=true http-equiv=Content-Security-Policy content="frame-src 'self' https://ghbtns.com/;"/><meta data-rh=true property=og:image content=https://fory.apache.org/img/logo.png /><meta data-rh=true property=og:image:width content=1500 /><meta data-rh=true property=og:image:height content=1500 /><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true name=twitter:image content=https://fory.apache.org/img/logo.png /><meta data-rh=true name=docusaurus_version content=1.6.0 /><meta data-rh=true name=docusaurus_tag content=docs-default-1.6.0 /><meta data-rh=true name=docsearch:version content=1.6.0 /><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-1.6.0 /><meta data-rh=true property=og:title content="Schema Metadata | Apache Fory™"/><meta data-rh=true name=description content="This page covers schema metadata for C# generated serializers."/><meta data-rh=true property=og:description content="This page covers schema metadata for C# generated serializers."/><link data-rh=true rel=icon href=/img/favicon.ico /><link data-rh=true rel=canonical href=https://fory.apache.org/docs/object-serialization/csharp/schema-metadata /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/object-serialization/csharp/schema-metadata hreflang=en-US /><link data-rh=true rel=alternate href=https://fory.apache.org/zh-CN/docs/object-serialization/csharp/schema-metadata hreflang=zh-CN /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/object-serialization/csharp/schema-metadata hreflang=x-default /><script data-rh=true type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"https://fory.apache.org/docs/object-serialization/csharp/","name":"C#","position":1},{"@type":"ListItem","item":"https://fory.apache.org/docs/object-serialization/csharp/schema-metadata","name":"Schema Metadata","position":2}]}</script><link rel=alternate type=application/rss+xml href=/blog/rss.xml title="Apache Fory™ RSS Feed"><link rel=alternate type=application/atom+xml href=/blog/atom.xml title="Apache Fory™ Atom Feed"><script type=text/javascript>"fury.apache.org"===window.location.host&&(window.location.href="https://fory.apache.org"),function(){var i=["0.17","0.16","0.15","0.14","0.13","0.12","0.11","0.10"];if(0!==i.length){var t=window.location.pathname.split("/").filter(Boolean),a=/^[a-z]{2}-[A-Z]{2}$/.test(t[0])?t[0]:null,e=+!!a;if(!("docs"!==t[e]||0>i.indexOf(t[e+1]))){var o=["/archive"];a&&o.push(a),o.push.apply(o,t.slice(e));var n=window.location.pathname.endsWith("/")?"/":"";window.location.replace(o.join("/")+n+window.location.search+window.location.hash)}}}(),function(){var i=window.location.pathname.split("/").filter(Boolean),t="docs"===i[0]?0:/^[a-z]{2}-[A-Z]{2}$/.test(i[0])&&"docs"===i[1]?1:-1;if(!(t<0)){var a=t+1,e=i[a];if(!/^[0-9]+[.][0-9]+(?:[.][0-9]+)?$/.test(e)){"next"===e&&a++;var o=i.slice(a).join("/"),n=o.split("/"),r=2===n.length&&"guide"===n[0]?n[1]:null,s=r&&["cpp","csharp","dart","go","java","javascript","kotlin","python","rust","scala","swift"].indexOf(r)>=0?"object-serialization/"+r:({"introduction/overview":"introduction","introduction/benchmark":"benchmarks","start/install":"start","start/usage":"start","guide/xlang":"object-serialization/xlang","guide/xlang/getting_started":"object-serialization/xlang","guide/xlang/serialization":"object-serialization/xlang","guide/java/json_support":"json","guide/rust/external_types":"object-serialization/rust/external-types","guide/dart/external_types":"object-serialization/dart/external-types","guide/swift/external_types":"object-serialization/swift/external-types","guide/csharp/external_types":"object-serialization/csharp/external-types","guide/csharp/basic_serialization":"object-serialization/csharp/basic-serialization","guide/dart/inheritance":"object-serialization/dart/inheritance","benchmarks/rust":"benchmarks/object-serialization/xlang/rust","compiler/compiler_guide":"compiler/getting-started","community/development":"development"})[o];if(s){var l="/"+i.slice(0,a).join("/");window.location.replace(l+"/"+s+"/"+window.location.search+window.location.hash)}}}}(),function(){var i=window.location.pathname,t=i.split("/").filter(Boolean),a="docs"===t[0]?0:/^[a-z]{2}-[A-Z]{2}$/.test(t[0])&&"docs"===t[1]?1:-1;if(!(a<0)){var e=a+1,o=t[e];if(("next"===o||/^[0-9]+[.][0-9]+(?:[.][0-9]+)?$/.test(o))&&e++,!("docs"!==t[e]||0>["guide","introduction","start"].indexOf(t[e+1]))){t.splice(e,1);var n="/"+t.join("/");i.endsWith("/")&&(n+="/"),window.location.replace(n+window.location.search+window.location.hash)}}}()</script><link rel=stylesheet href=/assets/css/styles.eba6f8f8.css /><script src=/assets/js/runtime~main.8f499156.js defer></script><script src=/assets/js/main.b5599e9a.js defer></script></head><body><svg style="display: none;"><defs>
<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><div role=region aria-label="Skip to main content"><a class=skipToContent_fXgn href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="theme-layout-navbar navbar navbar--fixed-top"><div class=navbar__inner><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/><div class=navbar__logo><img src=/img/fory-logo-light.png alt="Apache Fory™ Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"/><img src=/img/fory-logo-dark.png alt="Apache Fory™ Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"/></div><b class="navbar__title text--truncate"></b></a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/docs/introduction/>Docs</a><a class="navbar__item navbar__link" href=/docs/specification/xlang_serialization_spec>Specification</a><a class="navbar__item navbar__link" href=/docs/community/>Community</a><a class="navbar__item navbar__link" href=/user>Users</a><a class="navbar__item navbar__link" href=/download>Download</a><a class="navbar__item navbar__link" href=/blog>Blog</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link>ASF</a><ul class=dropdown__menu><li><a href=https://www.apache.org/ target=_blank rel="noopener noreferrer" class=dropdown__link>Foundation</a><li><a href=https://www.apache.org/licenses/ target=_blank rel="noopener noreferrer" class=dropdown__link>License</a><li><a href=https://www.apache.org/events/current-event.html target=_blank rel="noopener noreferrer" class=dropdown__link>Events</a><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html target=_blank rel="noopener noreferrer" class=dropdown__link>Privacy</a><li><a href=https://www.apache.org/security/ target=_blank rel="noopener noreferrer" class=dropdown__link>Security</a><li><a href=https://www.apache.org/foundation/sponsorship.html target=_blank rel="noopener noreferrer" class=dropdown__link>Sponsorship</a><li><a href=https://www.apache.org/foundation/thanks.html target=_blank rel="noopener noreferrer" class=dropdown__link>Thanks</a><li><a href=https://www.apache.org/foundation/policies/conduct.html target=_blank rel="noopener noreferrer" class=dropdown__link>Code of Conduct</a></ul></div><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class=navbar__link aria-haspopup=true aria-expanded=false role=button href=/docs/object-serialization/csharp/schema-metadata>1.6</a><ul class=dropdown__menu><li><a class=dropdown__link href=/docs/next/object-serialization/csharp/schema-metadata>dev</a><li><a aria-current=page class="dropdown__link dropdown__link--active" href=/docs/object-serialization/csharp/schema-metadata>1.6</a><li><a class=dropdown__link href=/docs/1.5/introduction/overview>1.5</a><li><a class=dropdown__link href=/docs/1.4/introduction/overview>1.4</a><li><a class=dropdown__link href=/docs/1.3/introduction/overview>1.3</a><li><a class=dropdown__link href=/docs/1.2/introduction/overview>1.2</a><li><a class=dropdown__link href=/docs/1.1/introduction/overview>1.1</a><li><a class=dropdown__link href=/docs/1.0/introduction/overview>1.0</a><li><a href=https://fory.apache.org/archive/docs/0.17/introduction/overview/ target=_blank rel="noopener noreferrer" class=dropdown__link>More versions<svg width=12 height=12 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div><a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link><svg viewBox="0 0 24 24" width=20 height=20 aria-hidden=true class=iconLanguage_nlXk><path fill=currentColor d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></svg>English</a><ul class=dropdown__menu><li><a href=/docs/object-serialization/csharp/schema-metadata target=_self rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang=en-US>English</a><li><a href=/zh-CN/docs/object-serialization/csharp/schema-metadata target=_self rel="noopener noreferrer" class=dropdown__link lang=zh-CN>简体中文</a></ul></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type=button disabled title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill=currentColor d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill=currentColor d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill=currentColor d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"/></svg></button></div><div class=navbarSearchContainer_Bca1><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled/></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class=docsWrapper_hBAB><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type=button></button><div class=docRoot_UBD9><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class=sidebarViewport_aRkj><div class=sidebar_njMd><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/introduction/><span title=Introduction class=categoryLinkLabel_W154>Introduction</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/start/><span title="Getting Started" class=categoryLinkLabel_W154>Getting Started</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/benchmarks/><span title=Benchmarks class=categoryLinkLabel_W154>Benchmarks</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role=button aria-expanded=true href=/docs/object-serialization/><span title="Object Serialization" class=categoryLinkLabel_W154>Object Serialization</span></a></div><ul class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/><span title=Introduction class=linkLabel_WmDU>Introduction</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/core-concepts><span title="Core Concepts" class=linkLabel_WmDU>Core Concepts</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/xlang><span title="Xlang Serialization" class=linkLabel_WmDU>Xlang Serialization</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/native><span title="Native Serialization" class=linkLabel_WmDU>Native Serialization</span></a><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/java/><span title=Java class=categoryLinkLabel_W154>Java</span></a><button aria-label="Expand sidebar category 'Java'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/python/><span title=Python class=categoryLinkLabel_W154>Python</span></a><button aria-label="Expand sidebar category 'Python'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/cpp/><span title=C++ class=categoryLinkLabel_W154>C++</span></a><button aria-label="Expand sidebar category 'C++'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/go/><span title=Go class=categoryLinkLabel_W154>Go</span></a><button aria-label="Expand sidebar category 'Go'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/rust/><span title=Rust class=categoryLinkLabel_W154>Rust</span></a><button aria-label="Expand sidebar category 'Rust'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/javascript/><span title=JavaScript/TypeScript class=categoryLinkLabel_W154>JavaScript/TypeScript</span></a><button aria-label="Expand sidebar category 'JavaScript/TypeScript'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--active" tabindex=0 href=/docs/object-serialization/csharp/><span title=C# class=categoryLinkLabel_W154>C#</span></a><button aria-label="Collapse sidebar category 'C#'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/basic-serialization><span title="Basic Serialization" class=linkLabel_WmDU>Basic Serialization</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/configuration><span title=Configuration class=linkLabel_WmDU>Configuration</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/type-registration><span title="Type Registration" class=linkLabel_WmDU>Type Registration</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/schema-evolution><span title="Schema Evolution" class=linkLabel_WmDU>Schema Evolution</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/docs/object-serialization/csharp/schema-metadata><span title="Schema Metadata" class=linkLabel_WmDU>Schema Metadata</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/references><span title=References class=linkLabel_WmDU>References</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/external-types><span title="External Types" class=linkLabel_WmDU>External Types</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/custom-serializers><span title="Custom Serializers" class=linkLabel_WmDU>Custom Serializers</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/supported-types><span title="Supported Types" class=linkLabel_WmDU>Supported Types</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/thread-safety><span title="Thread Safety" class=linkLabel_WmDU>Thread Safety</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/troubleshooting><span title=Troubleshooting class=linkLabel_WmDU>Troubleshooting</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/object-serialization/csharp/security><span title=Security class=linkLabel_WmDU>Security</span></a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/swift/><span title=Swift class=categoryLinkLabel_W154>Swift</span></a><button aria-label="Expand sidebar category 'Swift'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/dart/><span title=Dart class=categoryLinkLabel_W154>Dart</span></a><button aria-label="Expand sidebar category 'Dart'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/scala/><span title=Scala class=categoryLinkLabel_W154>Scala</span></a><button aria-label="Expand sidebar category 'Scala'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" tabindex=0 href=/docs/object-serialization/kotlin/><span title=Kotlin class=categoryLinkLabel_W154>Kotlin</span></a><button aria-label="Expand sidebar category 'Kotlin'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/row-format/><span title="Row Format" class=categoryLinkLabel_W154>Row Format</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/json/><span title="Fory JSON" class=categoryLinkLabel_W154>Fory JSON</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/compiler/><span title="Fory IDL & Compiler" class=categoryLinkLabel_W154>Fory IDL & Compiler</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/grpc/><span title="Fory gRPC" class=categoryLinkLabel_W154>Fory gRPC</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false href=/docs/development/><span title=Development class=categoryLinkLabel_W154>Development</span></a></div></ul></nav></div></div></aside><main class=docMainContainer_TBSr><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_VOVn"><div class=docItemContainer_Djhp><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label=Breadcrumbs><ul class=breadcrumbs><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_YNFT><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li class=breadcrumbs__item><span class=breadcrumbs__link>Object Serialization</span><li class=breadcrumbs__item><a class=breadcrumbs__link href=/docs/object-serialization/csharp/><span>C#</span></a><li class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link>Schema Metadata</span></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: 1.6</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type=button class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Schema Metadata</h1></header><p>This page covers schema metadata for C# generated serializers.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=forystruct-and-foryfield><code>[ForyStruct]</code> and <code>[ForyField]</code><a href=#forystruct-and-foryfield class=hash-link aria-label="Direct link to forystruct-and-foryfield" title="Direct link to forystruct-and-foryfield" translate=no></a></h2>
<p>Use <code>[ForyStruct]</code> to enable source-generated serializers. Use <code>[ForyField]</code> to assign an optional stable non-negative field id or to override the Fory schema type used for a field.</p>
<p>External-type serialization puts <code>Target</code> on a local abstract serializer
declaration. Its properties own the field names, IDs, schema descriptors,
and nullability. A standalone declaration also owns its <code>Evolving</code> setting.
An external <code>BaseOnly</code> declaration cannot set <code>Evolving</code>; each concrete
descendant owns that setting. The target supplies values of the target type and
directly accessed members.</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyStruct</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments">Target </span><span class="token attribute attribute-arguments operator" style=color:#393A34>=</span><span class="token attribute attribute-arguments"> </span><span class="token attribute attribute-arguments keyword" style=color:#00009f>typeof</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments type-expression class-name">ThirdParty</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">User</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>internal</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>abstract</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">UserSerializer</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyField</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments"></span><br/></div><div class=token-line style=color:#393A34><span class="token attribute attribute-arguments"> </span><span class="token attribute attribute-arguments number" style=color:#36acaa>1</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>,</span><span class="token attribute attribute-arguments"></span><br/></div><div class=token-line style=color:#393A34><span class="token attribute attribute-arguments"> TargetDeclaringType </span><span class="token attribute attribute-arguments operator" style=color:#393A34>=</span><span class="token attribute attribute-arguments"> </span><span class="token attribute attribute-arguments keyword" style=color:#00009f>typeof</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments type-expression class-name">ThirdParty</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">User</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>,</span><span class="token attribute attribute-arguments"></span><br/></div><div class=token-line style=color:#393A34><span class="token attribute attribute-arguments"> TargetMemberName </span><span class="token attribute attribute-arguments operator" style=color:#393A34>=</span><span class="token attribute attribute-arguments"> </span><span class="token attribute attribute-arguments string" style=color:#e3116c>"&lt;Name>k__BackingField"</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>abstract</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>string</span><span class="token plain"> Name </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=inherited-fields>Inherited Fields<a href=#inherited-fields class=hash-link aria-label="Direct link to Inherited Fields" title="Direct link to Inherited Fields" translate=no></a></h2>
<p>The concrete class serializer has one field list containing its own fields and
the selected fields from every annotated base class. That same flattened list
drives field ordering, schema hashes, and compatible metadata.</p>
<p>Property overrides contribute one logical field. The nearest override carrying
<code>[ForyField]</code> supplies the ID and schema descriptor. Fields and members hidden
with <code>new</code> remain distinct and must use unique IDs or unique normalized names.
Duplicate IDs and duplicate name-based identities are generation errors.</p>
<p>Changing a wire member on an annotated base changes every derived schema.
Rebuild assemblies containing derived serializers after updating the base
package.</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>using</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>Apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>Fory</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>using</span><span class="token plain"> </span><span class="token class-name">S</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Apache</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Fory</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Schema</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Types</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyStruct</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">Metrics</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyField</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments">Type </span><span class="token attribute attribute-arguments operator" style=color:#393A34>=</span><span class="token attribute attribute-arguments"> </span><span class="token attribute attribute-arguments keyword" style=color:#00009f>typeof</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">UInt32</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>uint</span><span class="token plain"> Count </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>set</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyField</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments">Type </span><span class="token attribute attribute-arguments operator" style=color:#393A34>=</span><span class="token attribute attribute-arguments"> </span><span class="token attribute attribute-arguments keyword" style=color:#00009f>typeof</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">Tagged</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>&lt;</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">UInt64</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>></span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>ulong</span><span class="token plain"> TraceId </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>set</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>long</span><span class="token plain"> LatencyMicros </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>set</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div>
<p><code>Id</code> is optional. When it is omitted, compatible mode still matches the field by name.</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>using</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>Apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>Fory</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>using</span><span class="token plain"> </span><span class="token class-name">S</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Apache</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Fory</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Schema</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Types</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyStruct</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>class</span><span class="token plain"> </span><span class="token class-name">NestedMetrics</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyField</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments">Type </span><span class="token attribute attribute-arguments operator" style=color:#393A34>=</span><span class="token attribute attribute-arguments"> </span><span class="token attribute attribute-arguments keyword" style=color:#00009f>typeof</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">Map</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>&lt;</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">Fixed</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>&lt;</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">UInt32</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>></span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>,</span><span class="token attribute attribute-arguments type-expression class-name"> S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">List</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>&lt;</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">Tagged</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>&lt;</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">UInt64</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>></span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>></span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>></span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name">Dictionary</span><span class="token return-type class-name punctuation" style=color:#393A34>&lt;</span><span class="token return-type class-name keyword" style=color:#00009f>uint</span><span class="token return-type class-name punctuation" style=color:#393A34>,</span><span class="token return-type class-name"> List</span><span class="token return-type class-name punctuation" style=color:#393A34>&lt;</span><span class="token return-type class-name keyword" style=color:#00009f>ulong</span><span class="token return-type class-name punctuation" style=color:#393A34>?</span><span class="token return-type class-name punctuation" style=color:#393A34>></span><span class="token return-type class-name punctuation" style=color:#393A34>?</span><span class="token return-type class-name punctuation" style=color:#393A34>></span><span class="token plain"> Values </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>set</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token punctuation" style=color:#393A34>]</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyField</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments number" style=color:#36acaa>3</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>,</span><span class="token attribute attribute-arguments"> Type </span><span class="token attribute attribute-arguments operator" style=color:#393A34>=</span><span class="token attribute attribute-arguments"> </span><span class="token attribute attribute-arguments keyword" style=color:#00009f>typeof</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">UInt64</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token return-type class-name keyword" style=color:#00009f>ulong</span><span class="token plain"> StableCount </span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>get</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>set</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=schema-descriptor-types>Schema Descriptor Types<a href=#schema-descriptor-types class=hash-link aria-label="Direct link to Schema Descriptor Types" title="Direct link to Schema Descriptor Types" translate=no></a></h2>
<p>Schema descriptors live under <code>Apache.Fory.Schema.Types</code> and are metadata only. They do not replace normal C# carrier types.</p>
<p>Common scalar descriptors include:</p>
<ul>
<li class=""><code>S.Int32</code>, <code>S.UInt32</code></li>
<li class=""><code>S.Int64</code>, <code>S.UInt64</code></li>
<li class=""><code>S.Float16</code>, <code>S.BFloat16</code>, <code>S.Float32</code>, <code>S.Float64</code></li>
</ul>
<p>Container descriptors are composable:</p>
<ul>
<li class=""><code>S.Fixed&lt;TScalar></code> and <code>S.Tagged&lt;TScalar></code> for scalar integer encodings</li>
<li class=""><code>S.List&lt;TElement></code></li>
<li class=""><code>S.Set&lt;TElement></code></li>
<li class=""><code>S.Map&lt;TKey, TValue></code></li>
<li class=""><code>S.Array&lt;TElement></code></li>
</ul>
<p>Dense array fields use <code>S.Array&lt;TElement></code>, for example <code>S.Array&lt;S.Int32></code> or <code>S.Array&lt;S.BFloat16></code>.</p>
<p>Nullability comes from the C# carrier type. Use <code>List&lt;ulong?></code> for nullable list elements and <code>NullableKeyDictionary&lt;TKey, TValue></code> when a map needs nullable keys.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=foryunion-and-forycase><code>[ForyUnion]</code> and <code>[ForyCase]</code><a href=#foryunion-and-forycase class=hash-link aria-label="Direct link to foryunion-and-forycase" title="Direct link to foryunion-and-forycase" translate=no></a></h2>
<p>Generated union cases use <code>[ForyCase]</code> for both the stable case ID and optional
case payload schema type. Do not put <code>[ForyField]</code> on union case payload
members. Known case record names use PascalCase FDL case names; payload types
use qualified references when needed to avoid name conflicts. A typed union must
declare at least one non-<code>Unknown</code> case; <code>Unknown(UnknownCase)</code> is only the
Fory-owned forward-compatibility carrier. The marker only selects the carrier and
does not add an entry to the schema case table.</p>
<div class="language-csharp codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-csharp codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token keyword" style=color:#00009f>using</span><span class="token plain"> </span><span class="token namespace" style=opacity:0.7>Apache</span><span class="token namespace punctuation" style=opacity:0.7;color:#393A34>.</span><span class="token namespace" style=opacity:0.7>Fory</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>using</span><span class="token plain"> </span><span class="token class-name">S</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> </span><span class="token class-name">Apache</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Fory</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Schema</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Types</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyUnion</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>abstract</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>record</span><span class="token plain"> </span><span class="token class-name">Shape</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>{</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>private</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>Shape</span><span class="token punctuation" style=color:#393A34>(</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>{</span><span class="token punctuation" style=color:#393A34>}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyUnknownCase</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>record</span><span class="token plain"> </span><span class="token class-name">Unknown</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name">UnknownCase</span><span class="token plain"> Value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token type-list class-name">Shape</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyCase</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments number" style=color:#36acaa>0</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>record</span><span class="token plain"> </span><span class="token class-name">Circle</span><span class="token punctuation" style=color:#393A34>(</span><span class="token keyword" style=color:#00009f>global</span><span class="token punctuation" style=color:#393A34>::</span><span class="token class-name">example</span><span class="token class-name punctuation" style=color:#393A34>.</span><span class="token class-name">Circle</span><span class="token plain"> Value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token type-list class-name">Shape</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>[</span><span class="token attribute class-name">ForyCase</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments number" style=color:#36acaa>1</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>,</span><span class="token attribute attribute-arguments"> Type </span><span class="token attribute attribute-arguments operator" style=color:#393A34>=</span><span class="token attribute attribute-arguments"> </span><span class="token attribute attribute-arguments keyword" style=color:#00009f>typeof</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>(</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">Fixed</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>&lt;</span><span class="token attribute attribute-arguments type-expression class-name">S</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>.</span><span class="token attribute attribute-arguments type-expression class-name">Int32</span><span class="token attribute attribute-arguments type-expression class-name punctuation" style=color:#393A34>></span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token attribute attribute-arguments punctuation" style=color:#393A34>)</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token keyword" style=color:#00009f>public</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>sealed</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>partial</span><span class="token plain"> </span><span class="token keyword" style=color:#00009f>record</span><span class="token plain"> </span><span class="token class-name">Code</span><span class="token punctuation" style=color:#393A34>(</span><span class="token class-name keyword" style=color:#00009f>int</span><span class="token plain"> Value</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>:</span><span class="token plain"> </span><span class="token type-list class-name">Shape</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>}</span><br/></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=nullability-and-reference-tracking>Nullability and Reference Tracking<a href=#nullability-and-reference-tracking class=hash-link aria-label="Direct link to Nullability and Reference Tracking" title="Direct link to Nullability and Reference Tracking" translate=no></a></h2>
<ul>
<li class="">Field nullability comes from C# type nullability (<code>string?</code>, nullable value types, etc.).</li>
<li class="">Reference tracking is configured with <code>ForyBuilder.TrackRef(...)</code>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=related-topics>Related Topics<a href=#related-topics class=hash-link aria-label="Direct link to Related Topics" title="Direct link to Related Topics" translate=no></a></h2>
<ul>
<li class=""><a class="" href=/docs/object-serialization/csharp/configuration>Configuration</a></li>
<li class=""><a class="" href=/docs/object-serialization/csharp/external-types>External Types</a></li>
<li class=""><a class="" href=/docs/object-serialization/csharp/schema-evolution>Schema Evolution</a></li>
<li class=""><a class="" href=/docs/object-serialization/csharp/supported-types>Supported Types</a></li>
</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href=https://github.com/apache/fory-site/tree/main/docs/object-serialization/csharp/schema-metadata.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_Z9Sw aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"/></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href=/docs/object-serialization/csharp/schema-evolution><div class=pagination-nav__sublabel>Previous</div><div class=pagination-nav__label>Schema Evolution</div></a><a class="pagination-nav__link pagination-nav__link--next" href=/docs/object-serialization/csharp/references><div class=pagination-nav__sublabel>Next</div><div class=pagination-nav__label>References</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href=#forystruct-and-foryfield class="table-of-contents__link toc-highlight"><code>[ForyStruct]</code> and <code>[ForyField]</code></a><li><a href=#inherited-fields class="table-of-contents__link toc-highlight">Inherited Fields</a><li><a href=#schema-descriptor-types class="table-of-contents__link toc-highlight">Schema Descriptor Types</a><li><a href=#foryunion-and-forycase class="table-of-contents__link toc-highlight"><code>[ForyUnion]</code> and <code>[ForyCase]</code></a><li><a href=#nullability-and-reference-tracking class="table-of-contents__link toc-highlight">Nullability and Reference Tracking</a><li><a href=#related-topics class="table-of-contents__link toc-highlight">Related Topics</a></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Community</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://lists.apache.org/list.html?dev@fory.apache.org target=_blank rel="noopener noreferrer" class=footer__link-item>Mailing list<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://join.slack.com/t/fory-project/shared_invite/zt-1u8soj4qc-ieYEu7ciHOqA2mo47llS8A target=_blank rel="noopener noreferrer" class=footer__link-item>Slack<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://twitter.com/ApacheFory target=_blank rel="noopener noreferrer" class=footer__link-item>Twitter<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Docs</div><ul class="footer__items clean-list"><li class=footer__item><a class=footer__link-item href=/docs/start/>Install</a><li class=footer__item><a class=footer__link-item href=/docs/start/>Usage</a><li class=footer__item><a class=footer__link-item href=/docs/benchmarks/>Benchmark</a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Repositories</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class=footer__link-item>Apache Fory™<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://github.com/apache/fory-site target=_blank rel="noopener noreferrer" class=footer__link-item>Website<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div></div><div class="footer__bottom text--center"><div class=margin-bottom--sm><a href=https://apache.org/ rel="noopener noreferrer" class=footerLogoLink_BH7S><img src=/img/asf_logo.svg alt="ASF Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width=200 /><img src=/img/asf_logo.svg alt="ASF Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width=200 /></a></div><div class=footer__copyright><div>
<p>
Copyright © 2026 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br/>
Apache Fory, Fory, Apache, the Apache Logo and the Apache Fory logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries.
</p>
</div></div></div></div></footer></div></body>