http://bugzilla.novell.com/show_bug.cgi?id=525589


           Summary: JavaScriptConverter registered in web.config is not
                    used
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.4.x
          Platform: x86
        OS/Version: Windows XP
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: Sys.Web.Services
        AssignedTo: [email protected]
        ReportedBy: [email protected]
         QAContact: [email protected]
          Found By: ---


Created an attachment (id=308140)
 --> (http://bugzilla.novell.com/attachment.cgi?id=308140)
Sample web site to help debug a problem

User-Agent:       Opera/9.64 (Windows NT 5.1; U; en-GB) Presto/2.1.1

Web Service doesn't use JavaScriptConverter that is declared in web.config. My
web.config has following lines:
  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization>
          <converters>
            <add name="MyRecord2JSON" type="Nostr.Record2JSON"/>
          </converters>
        </jsonSerialization>
      </webServices>
    </scripting>
  </system.web.extensions>

But Nostr.Record2JSON is not used for encoding/decoding web service method
results and arguments.

Reproducible: Always

Steps to Reproduce:
1. Unpack attached archive.
2. Run XSP in the WebSite2 folder.
3. Navigate to http://localhost:8080/
4. Press "Call me" button.
5. Analyze text in textarea
Actual Results:  
[{"Table":"Glossary","ID":"1","Code":"NoVSomeGloss"},{"Name":"Derived","Table":"GlossView","ID":"2","Code":"NoVAll"},{"Table":"Glossary","ID":"3","Code":"NoVQ"}]

Expected Results:  
Results from .NET:
[{"__type":"Nostr.Record","CustomConverter":"Is
usedGlossary"},{"CustomConverter":"Is
usedGlossView"},{"__type":"Nostr.Record","CustomConverter":"Is usedGlossary"}]


There is no workaround. Please fix ASAP.

P.S. To save you time, I've dug into Mono sources (138126) and found the
following code in JavaScriptSerializer class:
        public JavaScriptSerializer (JavaScriptTypeResolver resolver) 
        {
            _typeResolver = resolver;

            ScriptingJsonSerializationSection section =
(ScriptingJsonSerializationSection) ConfigurationManager.GetSection
("system.web.extensions/scripting/webServices/jsonSerialization");
            if (section == null) {
                _maxJsonLength = 102400;
                _recursionLimit = 100;
            }
            else {
                _maxJsonLength = section.MaxJsonLength;
                _recursionLimit = section.RecursionLimit;
            }
        }

As you can see, call to RegisterConverters(section.Converters) is suspiciously
missing. The easy way to fix it would be to add it. But from theoretical point
of view there could be some application that explicitly uses
JavaScriptSerializer but doesn't need any converters from web.config. That
application would work in .NET (it doesn't add any converters in
JavaScriptSerializer constructor), but would fail in Mono. In order to make it
work all references to ConfigurationManager should be removed from
JavaScriptSerializer constructor. Instead, there should be a static method that
would construct JavaScriptSerializer and initialize it from web.config. It
should be used to construct JavaScriptSerializer inside
System.Web.Extensions.dll instead of regular constructor. Hope this helps.

-- 
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to