﻿
using UniJSON;
using System;
using System.Collections.Generic;
using VRM;
using UnityEngine;

namespace VRM {

public static class VrmDeserializer
{


public static glTF_VRM_extensions Deserialize(JsonNode parsed)
{
    var value = new glTF_VRM_extensions();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="exporterVersion"){
            value.exporterVersion = kv.Value.GetString();
            continue;
        }

        if(key=="specVersion"){
            value.specVersion = kv.Value.GetString();
            continue;
        }

        if(key=="meta"){
            value.meta = Deserialize_vrm_meta(kv.Value);
            continue;
        }

        if(key=="humanoid"){
            value.humanoid = Deserialize_vrm_humanoid(kv.Value);
            continue;
        }

        if(key=="firstPerson"){
            value.firstPerson = Deserialize_vrm_firstPerson(kv.Value);
            continue;
        }

        if(key=="blendShapeMaster"){
            value.blendShapeMaster = Deserialize_vrm_blendShapeMaster(kv.Value);
            continue;
        }

        if(key=="secondaryAnimation"){
            value.secondaryAnimation = Deserialize_vrm_secondaryAnimation(kv.Value);
            continue;
        }

        if(key=="materialProperties"){
            value.materialProperties = Deserialize_vrm_materialProperties(kv.Value);
            continue;
        }

    }
    return value;
}

public static glTF_VRM_Meta Deserialize_vrm_meta(JsonNode parsed)
{
    var value = new glTF_VRM_Meta();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="title"){
            value.title = kv.Value.GetString();
            continue;
        }

        if(key=="version"){
            value.version = kv.Value.GetString();
            continue;
        }

        if(key=="author"){
            value.author = kv.Value.GetString();
            continue;
        }

        if(key=="contactInformation"){
            value.contactInformation = kv.Value.GetString();
            continue;
        }

        if(key=="reference"){
            value.reference = kv.Value.GetString();
            continue;
        }

        if(key=="texture"){
            value.texture = kv.Value.GetInt32();
            continue;
        }

        if(key=="allowedUserName"){
            value.allowedUserName = kv.Value.GetString();
            continue;
        }

        if(key=="violentUssageName"){
            value.violentUssageName = kv.Value.GetString();
            continue;
        }

        if(key=="sexualUssageName"){
            value.sexualUssageName = kv.Value.GetString();
            continue;
        }

        if(key=="commercialUssageName"){
            value.commercialUssageName = kv.Value.GetString();
            continue;
        }

        if(key=="otherPermissionUrl"){
            value.otherPermissionUrl = kv.Value.GetString();
            continue;
        }

        if(key=="licenseName"){
            value.licenseName = kv.Value.GetString();
            continue;
        }

        if(key=="otherLicenseUrl"){
            value.otherLicenseUrl = kv.Value.GetString();
            continue;
        }

    }
    return value;
}

public static glTF_VRM_Humanoid Deserialize_vrm_humanoid(JsonNode parsed)
{
    var value = new glTF_VRM_Humanoid();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="humanBones"){
            value.humanBones = Deserialize_vrm_humanoid_humanBones(kv.Value);
            continue;
        }

        if(key=="armStretch"){
            value.armStretch = kv.Value.GetSingle();
            continue;
        }

        if(key=="legStretch"){
            value.legStretch = kv.Value.GetSingle();
            continue;
        }

        if(key=="upperArmTwist"){
            value.upperArmTwist = kv.Value.GetSingle();
            continue;
        }

        if(key=="lowerArmTwist"){
            value.lowerArmTwist = kv.Value.GetSingle();
            continue;
        }

        if(key=="upperLegTwist"){
            value.upperLegTwist = kv.Value.GetSingle();
            continue;
        }

        if(key=="lowerLegTwist"){
            value.lowerLegTwist = kv.Value.GetSingle();
            continue;
        }

        if(key=="feetSpacing"){
            value.feetSpacing = kv.Value.GetSingle();
            continue;
        }

        if(key=="hasTranslationDoF"){
            value.hasTranslationDoF = kv.Value.GetBoolean();
            continue;
        }

    }
    return value;
}

public static List<VRM.glTF_VRM_HumanoidBone> Deserialize_vrm_humanoid_humanBones(JsonNode parsed)
{
    var value = new List<glTF_VRM_HumanoidBone>();
    foreach(var x in parsed.ArrayItems())
    {
        value.Add(Deserialize_vrm_humanoid_humanBones_LIST(x));
    }
	return value;
}
public static glTF_VRM_HumanoidBone Deserialize_vrm_humanoid_humanBones_LIST(JsonNode parsed)
{
    var value = new glTF_VRM_HumanoidBone();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="bone"){
            value.bone = kv.Value.GetString();
            continue;
        }

        if(key=="node"){
            value.node = kv.Value.GetInt32();
            continue;
        }

        if(key=="useDefaultValues"){
            value.useDefaultValues = kv.Value.GetBoolean();
            continue;
        }

        if(key=="min"){
            value.min = Deserialize_vrm_humanoid_humanBones__min(kv.Value);
            continue;
        }

        if(key=="max"){
            value.max = Deserialize_vrm_humanoid_humanBones__max(kv.Value);
            continue;
        }

        if(key=="center"){
            value.center = Deserialize_vrm_humanoid_humanBones__center(kv.Value);
            continue;
        }

        if(key=="axisLength"){
            value.axisLength = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static Vector3 Deserialize_vrm_humanoid_humanBones__min(JsonNode parsed)
{
    var value = new Vector3();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="x"){
            value.x = kv.Value.GetSingle();
            continue;
        }

        if(key=="y"){
            value.y = kv.Value.GetSingle();
            continue;
        }

        if(key=="z"){
            value.z = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static Vector3 Deserialize_vrm_humanoid_humanBones__max(JsonNode parsed)
{
    var value = new Vector3();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="x"){
            value.x = kv.Value.GetSingle();
            continue;
        }

        if(key=="y"){
            value.y = kv.Value.GetSingle();
            continue;
        }

        if(key=="z"){
            value.z = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static Vector3 Deserialize_vrm_humanoid_humanBones__center(JsonNode parsed)
{
    var value = new Vector3();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="x"){
            value.x = kv.Value.GetSingle();
            continue;
        }

        if(key=="y"){
            value.y = kv.Value.GetSingle();
            continue;
        }

        if(key=="z"){
            value.z = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static glTF_VRM_Firstperson Deserialize_vrm_firstPerson(JsonNode parsed)
{
    var value = new glTF_VRM_Firstperson();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="firstPersonBone"){
            value.firstPersonBone = kv.Value.GetInt32();
            continue;
        }

        if(key=="firstPersonBoneOffset"){
            value.firstPersonBoneOffset = Deserialize_vrm_firstPerson_firstPersonBoneOffset(kv.Value);
            continue;
        }

        if(key=="meshAnnotations"){
            value.meshAnnotations = Deserialize_vrm_firstPerson_meshAnnotations(kv.Value);
            continue;
        }

        if(key=="lookAtTypeName"){
            value.lookAtTypeName = kv.Value.GetString();
            continue;
        }

        if(key=="lookAtHorizontalInner"){
            value.lookAtHorizontalInner = Deserialize_vrm_firstPerson_lookAtHorizontalInner(kv.Value);
            continue;
        }

        if(key=="lookAtHorizontalOuter"){
            value.lookAtHorizontalOuter = Deserialize_vrm_firstPerson_lookAtHorizontalOuter(kv.Value);
            continue;
        }

        if(key=="lookAtVerticalDown"){
            value.lookAtVerticalDown = Deserialize_vrm_firstPerson_lookAtVerticalDown(kv.Value);
            continue;
        }

        if(key=="lookAtVerticalUp"){
            value.lookAtVerticalUp = Deserialize_vrm_firstPerson_lookAtVerticalUp(kv.Value);
            continue;
        }

    }
    return value;
}

public static Vector3 Deserialize_vrm_firstPerson_firstPersonBoneOffset(JsonNode parsed)
{
    var value = new Vector3();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="x"){
            value.x = kv.Value.GetSingle();
            continue;
        }

        if(key=="y"){
            value.y = kv.Value.GetSingle();
            continue;
        }

        if(key=="z"){
            value.z = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static List<VRM.glTF_VRM_MeshAnnotation> Deserialize_vrm_firstPerson_meshAnnotations(JsonNode parsed)
{
    var value = new List<glTF_VRM_MeshAnnotation>();
    foreach(var x in parsed.ArrayItems())
    {
        value.Add(Deserialize_vrm_firstPerson_meshAnnotations_LIST(x));
    }
	return value;
}
public static glTF_VRM_MeshAnnotation Deserialize_vrm_firstPerson_meshAnnotations_LIST(JsonNode parsed)
{
    var value = new glTF_VRM_MeshAnnotation();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="mesh"){
            value.mesh = kv.Value.GetInt32();
            continue;
        }

        if(key=="firstPersonFlag"){
            value.firstPersonFlag = kv.Value.GetString();
            continue;
        }

    }
    return value;
}

public static glTF_VRM_DegreeMap Deserialize_vrm_firstPerson_lookAtHorizontalInner(JsonNode parsed)
{
    var value = new glTF_VRM_DegreeMap();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="curve"){
            value.curve = Deserialize_vrm_firstPerson_lookAtHorizontalInner_curve(kv.Value);
            continue;
        }

        if(key=="xRange"){
            value.xRange = kv.Value.GetSingle();
            continue;
        }

        if(key=="yRange"){
            value.yRange = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static Single[] Deserialize_vrm_firstPerson_lookAtHorizontalInner_curve(JsonNode parsed)
{
    var value = new Single[parsed.GetArrayCount()];
    int i=0;
    foreach(var x in parsed.ArrayItems())
    {
        value[i++] = x.GetSingle();
    }
	return value;
} 

public static glTF_VRM_DegreeMap Deserialize_vrm_firstPerson_lookAtHorizontalOuter(JsonNode parsed)
{
    var value = new glTF_VRM_DegreeMap();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="curve"){
            value.curve = Deserialize_vrm_firstPerson_lookAtHorizontalOuter_curve(kv.Value);
            continue;
        }

        if(key=="xRange"){
            value.xRange = kv.Value.GetSingle();
            continue;
        }

        if(key=="yRange"){
            value.yRange = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static Single[] Deserialize_vrm_firstPerson_lookAtHorizontalOuter_curve(JsonNode parsed)
{
    var value = new Single[parsed.GetArrayCount()];
    int i=0;
    foreach(var x in parsed.ArrayItems())
    {
        value[i++] = x.GetSingle();
    }
	return value;
} 

public static glTF_VRM_DegreeMap Deserialize_vrm_firstPerson_lookAtVerticalDown(JsonNode parsed)
{
    var value = new glTF_VRM_DegreeMap();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="curve"){
            value.curve = Deserialize_vrm_firstPerson_lookAtVerticalDown_curve(kv.Value);
            continue;
        }

        if(key=="xRange"){
            value.xRange = kv.Value.GetSingle();
            continue;
        }

        if(key=="yRange"){
            value.yRange = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static Single[] Deserialize_vrm_firstPerson_lookAtVerticalDown_curve(JsonNode parsed)
{
    var value = new Single[parsed.GetArrayCount()];
    int i=0;
    foreach(var x in parsed.ArrayItems())
    {
        value[i++] = x.GetSingle();
    }
	return value;
} 

public static glTF_VRM_DegreeMap Deserialize_vrm_firstPerson_lookAtVerticalUp(JsonNode parsed)
{
    var value = new glTF_VRM_DegreeMap();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="curve"){
            value.curve = Deserialize_vrm_firstPerson_lookAtVerticalUp_curve(kv.Value);
            continue;
        }

        if(key=="xRange"){
            value.xRange = kv.Value.GetSingle();
            continue;
        }

        if(key=="yRange"){
            value.yRange = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static Single[] Deserialize_vrm_firstPerson_lookAtVerticalUp_curve(JsonNode parsed)
{
    var value = new Single[parsed.GetArrayCount()];
    int i=0;
    foreach(var x in parsed.ArrayItems())
    {
        value[i++] = x.GetSingle();
    }
	return value;
} 

public static glTF_VRM_BlendShapeMaster Deserialize_vrm_blendShapeMaster(JsonNode parsed)
{
    var value = new glTF_VRM_BlendShapeMaster();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="blendShapeGroups"){
            value.blendShapeGroups = Deserialize_vrm_blendShapeMaster_blendShapeGroups(kv.Value);
            continue;
        }

    }
    return value;
}

public static List<VRM.glTF_VRM_BlendShapeGroup> Deserialize_vrm_blendShapeMaster_blendShapeGroups(JsonNode parsed)
{
    var value = new List<glTF_VRM_BlendShapeGroup>();
    foreach(var x in parsed.ArrayItems())
    {
        value.Add(Deserialize_vrm_blendShapeMaster_blendShapeGroups_LIST(x));
    }
	return value;
}
public static glTF_VRM_BlendShapeGroup Deserialize_vrm_blendShapeMaster_blendShapeGroups_LIST(JsonNode parsed)
{
    var value = new glTF_VRM_BlendShapeGroup();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="name"){
            value.name = kv.Value.GetString();
            continue;
        }

        if(key=="presetName"){
            value.presetName = kv.Value.GetString();
            continue;
        }

        if(key=="binds"){
            value.binds = Deserialize_vrm_blendShapeMaster_blendShapeGroups__binds(kv.Value);
            continue;
        }

        if(key=="materialValues"){
            value.materialValues = Deserialize_vrm_blendShapeMaster_blendShapeGroups__materialValues(kv.Value);
            continue;
        }

        if(key=="isBinary"){
            value.isBinary = kv.Value.GetBoolean();
            continue;
        }

    }
    return value;
}

public static List<VRM.glTF_VRM_BlendShapeBind> Deserialize_vrm_blendShapeMaster_blendShapeGroups__binds(JsonNode parsed)
{
    var value = new List<glTF_VRM_BlendShapeBind>();
    foreach(var x in parsed.ArrayItems())
    {
        value.Add(Deserialize_vrm_blendShapeMaster_blendShapeGroups__binds_LIST(x));
    }
	return value;
}
public static glTF_VRM_BlendShapeBind Deserialize_vrm_blendShapeMaster_blendShapeGroups__binds_LIST(JsonNode parsed)
{
    var value = new glTF_VRM_BlendShapeBind();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="mesh"){
            value.mesh = kv.Value.GetInt32();
            continue;
        }

        if(key=="index"){
            value.index = kv.Value.GetInt32();
            continue;
        }

        if(key=="weight"){
            value.weight = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static List<VRM.glTF_VRM_MaterialValueBind> Deserialize_vrm_blendShapeMaster_blendShapeGroups__materialValues(JsonNode parsed)
{
    var value = new List<glTF_VRM_MaterialValueBind>();
    foreach(var x in parsed.ArrayItems())
    {
        value.Add(Deserialize_vrm_blendShapeMaster_blendShapeGroups__materialValues_LIST(x));
    }
	return value;
}
public static glTF_VRM_MaterialValueBind Deserialize_vrm_blendShapeMaster_blendShapeGroups__materialValues_LIST(JsonNode parsed)
{
    var value = new glTF_VRM_MaterialValueBind();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="materialName"){
            value.materialName = kv.Value.GetString();
            continue;
        }

        if(key=="propertyName"){
            value.propertyName = kv.Value.GetString();
            continue;
        }

        if(key=="targetValue"){
            value.targetValue = Deserialize_vrm_blendShapeMaster_blendShapeGroups__materialValues__targetValue(kv.Value);
            continue;
        }

    }
    return value;
}

public static Single[] Deserialize_vrm_blendShapeMaster_blendShapeGroups__materialValues__targetValue(JsonNode parsed)
{
    var value = new Single[parsed.GetArrayCount()];
    int i=0;
    foreach(var x in parsed.ArrayItems())
    {
        value[i++] = x.GetSingle();
    }
	return value;
} 

public static glTF_VRM_SecondaryAnimation Deserialize_vrm_secondaryAnimation(JsonNode parsed)
{
    var value = new glTF_VRM_SecondaryAnimation();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="boneGroups"){
            value.boneGroups = Deserialize_vrm_secondaryAnimation_boneGroups(kv.Value);
            continue;
        }

        if(key=="colliderGroups"){
            value.colliderGroups = Deserialize_vrm_secondaryAnimation_colliderGroups(kv.Value);
            continue;
        }

    }
    return value;
}

public static List<VRM.glTF_VRM_SecondaryAnimationGroup> Deserialize_vrm_secondaryAnimation_boneGroups(JsonNode parsed)
{
    var value = new List<glTF_VRM_SecondaryAnimationGroup>();
    foreach(var x in parsed.ArrayItems())
    {
        value.Add(Deserialize_vrm_secondaryAnimation_boneGroups_LIST(x));
    }
	return value;
}
public static glTF_VRM_SecondaryAnimationGroup Deserialize_vrm_secondaryAnimation_boneGroups_LIST(JsonNode parsed)
{
    var value = new glTF_VRM_SecondaryAnimationGroup();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="comment"){
            value.comment = kv.Value.GetString();
            continue;
        }

        if(key=="stiffiness"){
            value.stiffiness = kv.Value.GetSingle();
            continue;
        }

        if(key=="gravityPower"){
            value.gravityPower = kv.Value.GetSingle();
            continue;
        }

        if(key=="gravityDir"){
            value.gravityDir = Deserialize_vrm_secondaryAnimation_boneGroups__gravityDir(kv.Value);
            continue;
        }

        if(key=="dragForce"){
            value.dragForce = kv.Value.GetSingle();
            continue;
        }

        if(key=="center"){
            value.center = kv.Value.GetInt32();
            continue;
        }

        if(key=="hitRadius"){
            value.hitRadius = kv.Value.GetSingle();
            continue;
        }

        if(key=="bones"){
            value.bones = Deserialize_vrm_secondaryAnimation_boneGroups__bones(kv.Value);
            continue;
        }

        if(key=="colliderGroups"){
            value.colliderGroups = Deserialize_vrm_secondaryAnimation_boneGroups__colliderGroups(kv.Value);
            continue;
        }

    }
    return value;
}

public static Vector3 Deserialize_vrm_secondaryAnimation_boneGroups__gravityDir(JsonNode parsed)
{
    var value = new Vector3();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="x"){
            value.x = kv.Value.GetSingle();
            continue;
        }

        if(key=="y"){
            value.y = kv.Value.GetSingle();
            continue;
        }

        if(key=="z"){
            value.z = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static Int32[] Deserialize_vrm_secondaryAnimation_boneGroups__bones(JsonNode parsed)
{
    var value = new Int32[parsed.GetArrayCount()];
    int i=0;
    foreach(var x in parsed.ArrayItems())
    {
        value[i++] = x.GetInt32();
    }
	return value;
} 

public static Int32[] Deserialize_vrm_secondaryAnimation_boneGroups__colliderGroups(JsonNode parsed)
{
    var value = new Int32[parsed.GetArrayCount()];
    int i=0;
    foreach(var x in parsed.ArrayItems())
    {
        value[i++] = x.GetInt32();
    }
	return value;
} 

public static List<VRM.glTF_VRM_SecondaryAnimationColliderGroup> Deserialize_vrm_secondaryAnimation_colliderGroups(JsonNode parsed)
{
    var value = new List<glTF_VRM_SecondaryAnimationColliderGroup>();
    foreach(var x in parsed.ArrayItems())
    {
        value.Add(Deserialize_vrm_secondaryAnimation_colliderGroups_LIST(x));
    }
	return value;
}
public static glTF_VRM_SecondaryAnimationColliderGroup Deserialize_vrm_secondaryAnimation_colliderGroups_LIST(JsonNode parsed)
{
    var value = new glTF_VRM_SecondaryAnimationColliderGroup();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="node"){
            value.node = kv.Value.GetInt32();
            continue;
        }

        if(key=="colliders"){
            value.colliders = Deserialize_vrm_secondaryAnimation_colliderGroups__colliders(kv.Value);
            continue;
        }

    }
    return value;
}

public static List<VRM.glTF_VRM_SecondaryAnimationCollider> Deserialize_vrm_secondaryAnimation_colliderGroups__colliders(JsonNode parsed)
{
    var value = new List<glTF_VRM_SecondaryAnimationCollider>();
    foreach(var x in parsed.ArrayItems())
    {
        value.Add(Deserialize_vrm_secondaryAnimation_colliderGroups__colliders_LIST(x));
    }
	return value;
}
public static glTF_VRM_SecondaryAnimationCollider Deserialize_vrm_secondaryAnimation_colliderGroups__colliders_LIST(JsonNode parsed)
{
    var value = new glTF_VRM_SecondaryAnimationCollider();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="offset"){
            value.offset = Deserialize_vrm_secondaryAnimation_colliderGroups__colliders__offset(kv.Value);
            continue;
        }

        if(key=="radius"){
            value.radius = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static Vector3 Deserialize_vrm_secondaryAnimation_colliderGroups__colliders__offset(JsonNode parsed)
{
    var value = new Vector3();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="x"){
            value.x = kv.Value.GetSingle();
            continue;
        }

        if(key=="y"){
            value.y = kv.Value.GetSingle();
            continue;
        }

        if(key=="z"){
            value.z = kv.Value.GetSingle();
            continue;
        }

    }
    return value;
}

public static List<VRM.glTF_VRM_Material> Deserialize_vrm_materialProperties(JsonNode parsed)
{
    var value = new List<glTF_VRM_Material>();
    foreach(var x in parsed.ArrayItems())
    {
        value.Add(Deserialize_vrm_materialProperties_LIST(x));
    }
	return value;
}
public static glTF_VRM_Material Deserialize_vrm_materialProperties_LIST(JsonNode parsed)
{
    var value = new glTF_VRM_Material();

    foreach(var kv in parsed.ObjectItems())
    {
        var key = kv.Key.GetString();

        if(key=="name"){
            value.name = kv.Value.GetString();
            continue;
        }

        if(key=="shader"){
            value.shader = kv.Value.GetString();
            continue;
        }

        if(key=="renderQueue"){
            value.renderQueue = kv.Value.GetInt32();
            continue;
        }

        if(key=="floatProperties"){
            value.floatProperties = Deserialize_vrm_materialProperties__floatProperties(kv.Value);
            continue;
        }

        if(key=="vectorProperties"){
            value.vectorProperties = Deserialize_vrm_materialProperties__vectorProperties(kv.Value);
            continue;
        }

        if(key=="textureProperties"){
            value.textureProperties = Deserialize_vrm_materialProperties__textureProperties(kv.Value);
            continue;
        }

        if(key=="keywordMap"){
            value.keywordMap = Deserialize_vrm_materialProperties__keywordMap(kv.Value);
            continue;
        }

        if(key=="tagMap"){
            value.tagMap = Deserialize_vrm_materialProperties__tagMap(kv.Value);
            continue;
        }

    }
    return value;
}

 
public static Dictionary<String, Single> Deserialize_vrm_materialProperties__floatProperties(JsonNode parsed)
{
    var value = new Dictionary<string, Single>();
    foreach(var kv in parsed.ObjectItems())
    {
        value.Add(kv.Key.GetString(), kv.Value.GetSingle());
    }
	return value;
}

 
public static Dictionary<String, Single[]> Deserialize_vrm_materialProperties__vectorProperties(JsonNode parsed)
{
    var value = new Dictionary<string, Single[]>();
    foreach(var kv in parsed.ObjectItems())
    {
        value.Add(kv.Key.GetString(), Deserialize_vrm_materialProperties__vectorProperties_DICT(kv.Value));
    }
	return value;
}

public static Single[] Deserialize_vrm_materialProperties__vectorProperties_DICT(JsonNode parsed)
{
    var value = new Single[parsed.GetArrayCount()];
    int i=0;
    foreach(var x in parsed.ArrayItems())
    {
        value[i++] = x.GetSingle();
    }
	return value;
} 

 
public static Dictionary<String, Int32> Deserialize_vrm_materialProperties__textureProperties(JsonNode parsed)
{
    var value = new Dictionary<string, Int32>();
    foreach(var kv in parsed.ObjectItems())
    {
        value.Add(kv.Key.GetString(), kv.Value.GetInt32());
    }
	return value;
}

 
public static Dictionary<String, Boolean> Deserialize_vrm_materialProperties__keywordMap(JsonNode parsed)
{
    var value = new Dictionary<string, Boolean>();
    foreach(var kv in parsed.ObjectItems())
    {
        value.Add(kv.Key.GetString(), kv.Value.GetBoolean());
    }
	return value;
}

 
public static Dictionary<String, String> Deserialize_vrm_materialProperties__tagMap(JsonNode parsed)
{
    var value = new Dictionary<string, String>();
    foreach(var kv in parsed.ObjectItems())
    {
        value.Add(kv.Key.GetString(), kv.Value.GetString());
    }
	return value;
}

} // VrmfDeserializer
} // VRM
