<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Wed Feb 07 21:49:25 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>MongoDB Jira</title>
    <link>https://jira.mongodb.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.7.1</version>
        <build-number>970001</build-number>
        <build-date>13-04-2023</build-date>
    </build-info>


<item>
            <title>[CSHARP-4809] If a string serializer doesn&apos;t implement IHasRepresentationSerializer don&apos;t assume string values are actually represented as strings</title>
                <link>https://jira.mongodb.org/browse/CSHARP-4809</link>
                <project id="10041" key="CSHARP">C# Driver</project>
                    <description>&lt;h4&gt;&lt;a name=&quot;Summary&quot;&gt;&lt;/a&gt;Summary&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Apologies if I miss something expected, just joined the project so I could report this.&#160; I&apos;m encountering a bug where the LINQ3 provider is not matching a document for update, but LINQ2 provider works.&lt;/em&gt;&#160;&#160;&lt;br/&gt;
I think it has something to do with the string -&amp;gt; ObectId conversion not woking with Linq3, maybe bsonserializer attribute is being ignored?&lt;/p&gt;



&lt;p&gt;&#160;&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;Pleaseprovidetheversionofthedriver.Ifapplicable%2CpleaseprovidetheMongoDBserverversionandtopology%28standalone%2Creplicaset%2Corshardedcluster%29.&quot;&gt;&lt;/a&gt;Please provide the version of the driver. If applicable, please provide the MongoDB server version and topology (standalone, replica set, or sharded cluster).&lt;/h4&gt;
&lt;h4&gt;&lt;a name=&quot;MongoDB.Driver2.22.0%28workedwithMongoDB.Driver2.16.1%29&quot;&gt;&lt;/a&gt;MongoDB.Driver 2.22.0 (worked with MongoDB.Driver 2.16.1)&lt;/h4&gt;
&lt;p&gt;MongoDB 6.04 replicaset&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;HowtoReproduce&quot;&gt;&lt;/a&gt;How to Reproduce&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Steps to reproduce. If possible, please include a &lt;a href=&quot;http://sscce.org/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Short, Self Contained, Correct (Compilable), Example&lt;/a&gt;.&lt;/em&gt;&lt;br/&gt;
&lt;em&gt;create a .net 6 console application&lt;/em&gt;&lt;br/&gt;
&lt;em&gt;add nuget for:&lt;/em&gt;&lt;br/&gt;
&#160; &lt;em&gt;MongoDB.Driver 2.22&lt;/em&gt;&lt;br/&gt;
&#160; &lt;em&gt;Microsoft.Extensions.Configuration 7.0&lt;/em&gt;&lt;br/&gt;
&#160;&#160;_&lt;em&gt;&#160;&#160;_Microsoft.Extensions.Configuration.Json 7.0&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;add an appsettings.json file with&lt;/em&gt;&#160;&lt;/p&gt;
&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;
&lt;p&gt;_&lt;/p&gt;
{
&#160; &quot;ConnectionStrings&quot;: \{
&#160; &#160; &quot;MongoConnectionString&quot;: &quot;&amp;lt;&amp;lt;&amp;lt;mongo connection string here&amp;gt;&amp;gt;&amp;gt;&quot;
&#160; }
&lt;p&gt;}_ &lt;/p&gt;

&lt;p&gt;&lt;em&gt;in Program.cs add this code&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;
&lt;p/&gt;
&lt;div id=&quot;syntaxplugin&quot; class=&quot;syntaxplugin&quot; style=&quot;border: 1px dashed #bbb; border-radius: 5px !important; overflow: auto; max-height: 30em;&quot;&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot; style=&quot;font-size: 1em; line-height: 1.4em !important; font-weight: normal; font-style: normal; color: black;&quot;&gt;
		&lt;tbody &gt;
				&lt;tr id=&quot;syntaxplugin_code_and_gutter&quot;&gt;
						&lt;td  style=&quot; line-height: 1.4em !important; padding: 0em; vertical-align: top;&quot;&gt;
					&lt;pre style=&quot;font-size: 1em; margin: 0 10px;  margin-top: 10px;   margin-bottom: 10px;  width: auto; padding: 0;&quot;&gt;&lt;span style=&quot;color: black; font-family: &apos;Consolas&apos;, &apos;Bitstream Vera Sans Mono&apos;, &apos;Courier New&apos;, Courier, monospace !important;&quot;&gt;&lt;/span&gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
			&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p/&gt;
&lt;p&gt;_using MongoDB.Bson.Serialization.Serializers;&lt;br/&gt;
using MongoDB.Bson;&lt;br/&gt;
using MongoDB.Driver;&lt;br/&gt;
using MongoDB.Bson.Serialization;&lt;br/&gt;
using Microsoft.Extensions.Configuration;&lt;br/&gt;
using MongoDB.Bson.Serialization.Attributes;/**&lt;br/&gt;
&#160;*&#160;&lt;br/&gt;
&#160;*&#160;&lt;br/&gt;
&#160;* toggle the value for useLinq3 to true to reproduce bug&lt;br/&gt;
&#160;* toggle the vaue for useLinq3 to false to show working in legacy&lt;br/&gt;
&#160;*&#160;&lt;br/&gt;
&#160;*/_&lt;br/&gt;
_var useLinq3 = false;&lt;br/&gt;
#region mainvar configuration = new ConfigurationBuilder()&lt;br/&gt;
&#160; &#160; &#160;.AddJsonFile($&quot;appsettings.json&quot;);var config = configuration.Build();&lt;br/&gt;
var connectionString = config.GetConnectionString(&quot;MongoConnectionString&quot;);MongoClientSettings settings = MongoClientSettings.FromConnectionString(connectionString);&lt;br/&gt;
if (!useLinq3)&lt;br/&gt;
{&lt;br/&gt;
&#160; &#160; settings.LinqProvider = MongoDB.Driver.Linq.LinqProvider.V2;&lt;br/&gt;
}&lt;br/&gt;
MongoClient dbClient = new MongoClient(settings);var database = dbClient.GetDatabase(&quot;sample_update_bug&quot;);&lt;br/&gt;
var collection = database.GetCollection&amp;lt;RootDocument&amp;gt;(&quot;RootDocuments&quot;);&lt;br/&gt;
var newDoc = new RootDocument() { Id = ObjectId.GenerateNewId().ToString() };&lt;br/&gt;
await collection.InsertOneAsync(newDoc);&lt;br/&gt;
var newSubDoc = new SubDocument()&lt;br/&gt;
{&lt;br/&gt;
&#160; &#160; SdId = ObjectId.GenerateNewId().ToString(),&lt;br/&gt;
&#160; &#160; DateAdded = DateTime.UtcNow&lt;br/&gt;
};FilterDefinition&amp;lt;RootDocument&amp;gt; filter = Builders&amp;lt;RootDocument&amp;gt;.Filter.Where(x =&amp;gt; x.Id == newDoc.Id);&lt;br/&gt;
UpdateDefinition&amp;lt;RootDocument&amp;gt; update = Builders&amp;lt;RootDocument&amp;gt;.Update.Set(x =&amp;gt; x.SubDoc, newSubDoc);var updateResult = await collection.UpdateOneAsync(filter, update).ConfigureAwait(false);&lt;br/&gt;
#endregion main&lt;br/&gt;
public static class Extensions&lt;br/&gt;
{&lt;br/&gt;
&#160; &#160; public static ObjectId ToObjectId(this string source)&lt;br/&gt;
&#160; &#160; {&lt;br/&gt;
&#160; &#160; &#160; &#160; if (ObjectId.TryParse(source, out ObjectId returnId))&lt;br/&gt;
&#160; &#160; &#160; &#160; &lt;/p&gt;
{
&#160; &#160; &#160; &#160; &#160; &#160; return returnId;
&#160; &#160; &#160; &#160; }
&lt;p&gt;&#160; &#160; &#160; &#160; else&lt;br/&gt;
&#160; &#160; &#160; &#160; {&lt;br/&gt;
&#160; &#160; &#160; &#160; &#160; &#160; return ObjectId.Empty;&#160; &#160; &#160; &#160; }&lt;br/&gt;
&#160; &#160; }&lt;br/&gt;
}#region string to ObjectId serializer&lt;br/&gt;
public class ObjectIdSerializer : SerializerBase&amp;lt;string&amp;gt;&lt;br/&gt;
{&lt;br/&gt;
&#160; &#160; public override string Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)&lt;br/&gt;
&#160; &#160; {&lt;br/&gt;
&#160; &#160; &#160; &#160; BsonType type = context.Reader.GetCurrentBsonType();&lt;br/&gt;
&#160; &#160; &#160; &#160; switch (type)&lt;br/&gt;
&#160; &#160; &#160; &#160; {&lt;br/&gt;
&#160; &#160; &#160; &#160; &#160; &#160; case BsonType.ObjectId: return context.Reader.ReadObjectId().ToString();&lt;br/&gt;
&#160; &#160; &#160; &#160; &#160; &#160; default:&lt;br/&gt;
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; var message = $&quot;Cannot convert a &lt;/p&gt;
{type}
&lt;p&gt; to a String.&quot;;&lt;br/&gt;
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; throw new NotSupportedException(message);&lt;br/&gt;
&#160; &#160; &#160; &#160; }&lt;br/&gt;
&#160; &#160; }&#160; &#160; public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, string value)&lt;br/&gt;
&#160; &#160; {&lt;br/&gt;
&#160; &#160; &#160; &#160; context.Writer.WriteObjectId(value.ToObjectId());&lt;br/&gt;
&#160; &#160; }&lt;br/&gt;
}&lt;br/&gt;
#endregion#region entities&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;BsonIgnoreExtraElements&amp;#93;&lt;/span&gt;&lt;br/&gt;
public class RootDocument&lt;br/&gt;
{&lt;br/&gt;
&#160; &#160; public RootDocument()&lt;br/&gt;
&#160; &#160; &lt;/p&gt;
{
&#160; &#160; }
&lt;p&gt;&#160; &#160; &lt;span class=&quot;error&quot;&gt;&amp;#91;BsonSerializer(typeof(ObjectIdSerializer))&amp;#93;&lt;/span&gt;&lt;br/&gt;
&#160; &#160; public string Id { get; set; }&#160; &#160; &lt;span class=&quot;error&quot;&gt;&amp;#91;BsonElement(&amp;quot;sd&amp;quot;)&amp;#93;&lt;/span&gt;&lt;br/&gt;
&#160; &#160; public SubDocument SubDoc { get; set; }&lt;br/&gt;
}public class SubDocument&lt;br/&gt;
{&lt;br/&gt;
&#160; &#160; /// &amp;lt;summary&amp;gt;The _id of the document in GridFS&amp;lt;/summary&amp;gt;&lt;br/&gt;
&#160; &#160; &lt;span class=&quot;error&quot;&gt;&amp;#91;BsonElement(&amp;quot;s&amp;quot;)&amp;#93;&lt;/span&gt;&lt;br/&gt;
&#160; &#160; &lt;span class=&quot;error&quot;&gt;&amp;#91;BsonSerializer(typeof(ObjectIdSerializer))&amp;#93;&lt;/span&gt;&lt;br/&gt;
&#160; &#160; public string SdId &lt;/p&gt;
{ get; set; }
&lt;p&gt;&#160; &#160; &lt;span class=&quot;error&quot;&gt;&amp;#91;BsonElement(&amp;quot;d&amp;quot;)&amp;#93;&lt;/span&gt;&lt;br/&gt;
&#160; &#160; public DateTime DateAdded { get; set; }}&lt;br/&gt;
#endregion_&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Run with&lt;/em&gt;&#160;&lt;em&gt;useLinq3 = false&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Run with useLinq3 = true&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;open a mongodb client and query the docs in the RootDocuments collection&lt;/p&gt;

&lt;p&gt;expected:&lt;br/&gt;
&#160; the docs should be equivalent (diff id&apos;s, and times, but same fields should be populated)&lt;/p&gt;

&lt;p&gt;actual:&lt;/p&gt;

&lt;p&gt;&#160; the doc when linq3 is used still has &quot;sd&quot; : null instead of the subdocument being saved&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;img src=&quot;https://jira.mongodb.org/secure/attachment/482870/482870_image-2023-10-13-11-16-47-287.png&quot; style=&quot;border: 0px solid black&quot; /&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;AdditionalBackground&quot;&gt;&lt;/a&gt;Additional Background&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Please provide any additional background information that may be helpful in diagnosing the bug.&lt;/em&gt;&lt;/p&gt;</description>
                <environment></environment>
        <key id="2473963">CSHARP-4809</key>
            <summary>If a string serializer doesn&apos;t implement IHasRepresentationSerializer don&apos;t assume string values are actually represented as strings</summary>
                <type id="1" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14703&amp;avatarType=issuetype">Bug</type>
                                            <priority id="10300" iconUrl="https://jira.mongodb.org/images/icons/priorities/medium.svg">Unknown</priority>
                        <status id="6" iconUrl="https://jira.mongodb.org/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="13201">Fixed</resolution>
                                        <assignee username="robert@mongodb.com">Robert Stam</assignee>
                                    <reporter username="frederick.donald@gmail.com">Donald Frederick</reporter>
                        <labels>
                    </labels>
                <created>Fri, 13 Oct 2023 15:16:50 +0000</created>
                <updated>Thu, 26 Oct 2023 18:16:40 +0000</updated>
                            <resolved>Thu, 26 Oct 2023 18:16:40 +0000</resolved>
                                                    <fixVersion>2.23.0</fixVersion>
                                    <component>LINQ3</component>
                                        <votes>0</votes>
                                    <watches>4</watches>
                                                                                                                <comments>
                            <comment id="5811197" author="xgen-internal-githook" created="Thu, 26 Oct 2023 18:16:11 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;rstam&apos;, &apos;email&apos;: &apos;robert@robertstam.org&apos;, &apos;username&apos;: &apos;rstam&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CSHARP-4809&quot; title=&quot;If a string serializer doesn&amp;#39;t implement IHasRepresentationSerializer don&amp;#39;t assume string values are actually represented as strings&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CSHARP-4809&quot;&gt;&lt;del&gt;CSHARP-4809&lt;/del&gt;&lt;/a&gt;: If a string serializer doesn&apos;t implement IHasRepresentationSerializer don&apos;t assume string values are actually represented as strings.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/commit/c249251997170f50a08945d7e0f2b57d6c2e13c5&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-csharp-driver/commit/c249251997170f50a08945d7e0f2b57d6c2e13c5&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5782370" author="rstam" created="Mon, 16 Oct 2023 18:49:59 +0000"  >&lt;p&gt;The core issue here is that the LINQ translator has no way of determining whether your custom serializer actually stores C# string values as strings in the database, which in your case it does not (it converts them to ObjectIds).&lt;/p&gt;

&lt;p&gt;The way the LINQ provider tries to determine whether a string serializer actually stores string values as strings in the database is by checking to see if the serializer implements the IRepresentationConfigurable interface, which your custom serializer does not.&lt;/p&gt;

&lt;p&gt;The current code assumes that a string serializer does in fact store strings as strings (a reasonable assumption). Since this assumption is not guaranteed to be correct, we will be changing the code to assume the opposite: unless we can determine for sure that a string serializer actually stores string values as strings we will assume it does not. This is the safer assumption. The consequence is that in such a case we won&apos;t ever translate any C# string expressions to MQL regexes.&lt;/p&gt;

&lt;p&gt;Note: while the current code uses IRepresentationConfigurable to determine how a string serializer actually represents string values in the database, we will be switching to using the IHasRepresentationSerializer interface. In other words, we only need to determine the serialized representation, it doesn&apos;t matter if it is configurable or not.&lt;/p&gt;</comment>
                            <comment id="5778094" author="JIRAUSER1257742" created="Fri, 13 Oct 2023 23:53:37 +0000"  >&lt;p&gt;Thank you for submitting this issue and the reproduction code &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=frederick.donald%40gmail.com&quot; class=&quot;user-hover&quot; rel=&quot;frederick.donald@gmail.com&quot;&gt;frederick.donald@gmail.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We have reproduced this behavior and will be looking further into this.&lt;br/&gt;
Meanwhile we can suggest a workaround to use &lt;tt&gt;ObjectId&lt;/tt&gt; type directly instead of string, without custom serializer (and using ToString on demand).&lt;/p&gt;

&lt;p&gt;Please follow this ticket for further updates.&lt;/p&gt;</comment>
                            <comment id="5776752" author="JIRAUSER1275468" created="Fri, 13 Oct 2023 15:22:19 +0000"  >&lt;p&gt;Apologies, discovered new information while creating this bug, and forgot to update the title.&#160; If someone is able to edit, please change it to something more descriptive.&#160; I suggest &quot;LINQ3 filter on id with custom bsonserializer doesn&apos;t seem to be respected causing no match&quot;&lt;/p&gt;</comment>
                            <comment id="5776728" author="dbeng-pm-bot" created="Fri, 13 Oct 2023 15:16:53 +0000"  >&lt;p&gt;Hi &lt;a href=&quot;https://jira.mongodb.org/secure/ViewProfile.jspa?name=frederick.donald%40gmail.com&quot; class=&quot;user-hover&quot; rel=&quot;frederick.donald@gmail.com&quot;&gt;frederick.donald@gmail.com&lt;/a&gt;, thank you for reporting this issue! The team will look into it and get back to you soon. &lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                            <attachment id="482870" name="image-2023-10-13-11-16-47-287.png" size="38456" author="frederick.donald@gmail.com" created="Fri, 13 Oct 2023 15:16:47 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Backwards Compatibility</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10038"><![CDATA[Fully Compatible]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10257" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Documentation Changes</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="11861"><![CDATA[Not Needed]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14266" key="com.atlassian.jira.plugin.system.customfieldtypes:textarea">
                        <customfieldname>Documentation Changes Summary</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>&lt;p&gt;1.  What would you like to communicate to the user about this feature?&lt;br/&gt;
2.  Would you like the user to see examples of the syntax and/or executable code and its output?&lt;br/&gt;
3.  Which versions of the driver/connector does this apply to?&lt;/p&gt;</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|i2dvpw:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </customfields>
    </item>
</channel>
</rss>