JSON.Stringify falla en Scripting.Dictionary objetos

Estoy trabajando en un proyecto ASP clásico donde he implementado la clase JScript JSON encontradaaqu. Es capaz de interoperar con VBScript y JScript y es casi exactamente el código proporcionado en json.org. El gerente de mi equipo me exige que use VBScript para este proyecto.

Funciona muy bien en primitivas y clases definidas dentro de ASP. Pero necesito objetos de Diccionario que, según mi conocimiento, solo están disponibles a través de la interoperabilidad COM. (a través deServer.CreateObject("Scripting.Dictionary")) Tengo la siguiente clase que representa un producto: (ProductInfo.class.asp)

<%
Class ProductInfo

    Public ID
    Public Category
    Public PriceUS
    Public PriceCA
    Public Name
    Public SKU
    Public Overview
    Public Features
    Public Specs

End Class
%>

LosSpecs property es un diccionario de clave: pares de valores. Así es como lo estoy serializando: (product.asp)

<%
dim oProd
set oProd = new ProductInfo
' ... fill in properties
' ... output appropriate headers and stuff
Response.write( JSON.stringify( oProd ) )
%>

Cuando paso una instancia deProductInfo aJSON.Stringify (como se ve arriba) me sale algo como lo siguiente:

{
    "id": "1547",
    "Category": {
        "id": 101,
        "Name": "Category Name",
        "AlternateName": "",
        "URL": "/category_name/",
        "ParentCategoryID": 21
    },
    "PriceUS": 9.99,
    "PriceCA": 11.99,
    "Name": "Product Name",
    "SKU": 3454536,
    "Overview": "Lorem Ipsum dolor sit amet..",
    "Features": "Lorem Ipsum dolor sit amet..",
    "Specs": {}
}

omo puedes ver, laSpecs propiedad es un objeto vacío. Creo que el método JSON stringify sabe que laSpecsa propiedad @ es un objeto, por lo que agrega la{} a la cadena JSON alrededor de la stringified salida. Que en este caso es una cadena vacía. Lo que espero que muestre, sin embargo, no es un objeto vacío. Vea abajo

"Specs": {
    "foo":"bar",
    "baz":1,
    "etc":"..."
}

Creo que el área problemática de la biblioteca JSON está aquí: (json2.asp)

// Otherwise, iterate through all of the keys in the object.

for (k in value) {
    if (Object.hasOwnProperty.call(value, k)) {
        v = str(k, value);
        if (v) {
            partial.push(quote(k) + (gap ? ': ' : ':') + v);
        }
    }
}

ostulo que el problema con el código anterior es que supone que todos los objetos heredan de laObject clase. (El que proporcionahasOwnProperty) Sin embargo, creo que es probable que los objetos COM no hereden de laObject clase - o al menos lamism Object clase. O al menos no implemente la interfaz necesaria para hacerfor ... in en ellos

Actualizar Si bien creo que es irrelevante que se responda la pregunta, espero que algún tipo de cliente web solicite (a través de http) la representación JSON de este objeto o una colección de este objeto.

tl; dr La pregunta: ¿Qué debo hacer para que elScripting.Dictionary se puede generar correctamente como JSON en lugar de fallar y devolver solo una cadena vacía? ¿Necesito 'reinventar la rueda' y escribir mi propiaDictionary clase en VBScript quehac ¿actúa como un objeto normal en ASP?

Respuestas a la pregunta(3)

Su respuesta a la pregunta