From 3036aba875187923b4e4d8481d46334e53393107 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 12 Mar 2010 14:28:31 -0800 Subject: [PATCH 1/2] * Added a better check to the SimianGrid connectors to test if they are enabled or not. This method should work equally well with standalone or robust mode * Applying #4602 from Misterblu to add collision detection to BulletDotNET --- .../Framework/Scenes/SceneObjectPart.cs | 1 + .../BulletDotNETCharacter.cs | 33 +- .../BulletDotNETPlugin/BulletDotNETPrim.cs | 102 +- .../BulletDotNETPlugin/BulletDotNETScene.cs | 99 +- OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 4 +- .../SimianGrid/SimianAssetServiceConnector.cs | 35 +- .../SimianAuthenticationServiceConnector.cs | 27 +- .../SimianAvatarServiceConnector.cs | 35 +- .../SimianFriendsServiceConnector.cs | 27 +- .../Connectors/SimianGrid/SimianGrid.cs | 16 + .../SimianGrid/SimianGridServiceConnector.cs | 27 +- .../SimianInventoryServiceConnector.cs | 45 +- .../SimianPresenceServiceConnector.cs | 27 +- .../Connectors/SimianGrid/SimianProfiles.cs | 35 +- .../SimianUserAccountServiceConnector.cs | 29 +- bin/BulletDotNET.dll | Bin 58880 -> 58880 bytes bin/Newtonsoft.Json.XML | 11654 ++++++++-------- bin/libbulletnet.dll | Bin 360448 -> 369664 bytes 18 files changed, 6198 insertions(+), 5998 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 89672526dd..a2b98b9f85 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -2044,6 +2044,7 @@ namespace OpenSim.Region.Framework.Scenes { m_lastColliders.Remove(localID); } + if (m_parentGroup == null) return; if (m_parentGroup.IsDeleted) diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs index 6a54705cb1..ac4e2b9c73 100644 --- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs +++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs @@ -108,12 +108,11 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin private bool[] m_colliderarr = new bool[11]; private bool[] m_colliderGroundarr = new bool[11]; - - private BulletDotNETScene m_parent_scene; public int m_eventsubscription = 0; - // private CollisionEventUpdate CollisionEventsThisFrame = new CollisionEventUpdate(); + private CollisionEventUpdate CollisionEventsThisFrame = null; + private int m_requestedUpdateFrequency = 0; public BulletDotNETCharacter(string avName, BulletDotNETScene parent_scene, Vector3 pos, Vector3 size, float pid_d, float pid_p, float capsule_radius, float tensor, float density, float height_fudge_factor, float walk_divisor, float rundivisor) { @@ -212,7 +211,8 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin m_mass = Mass; Body = new btRigidBody(m_mass, m_bodyMotionState, Shell); - Body.setUserPointer(new IntPtr((int)Body.Handle)); + // this is used for self identification. User localID instead of body handle + Body.setUserPointer(new IntPtr((int)m_localID)); if (ClosestCastResult != null) ClosestCastResult.Dispose(); @@ -717,6 +717,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin public override void SubscribeEvents(int ms) { m_eventsubscription = ms; + m_requestedUpdateFrequency = ms; m_parent_scene.addCollisionEventReporting(this); } @@ -724,6 +725,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin { m_parent_scene.remCollisionEventReporting(this); m_eventsubscription = 0; + m_requestedUpdateFrequency = 0; } public override bool SubscribedEvents() @@ -733,6 +735,29 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin return false; } + public void AddCollision(uint collideWith, ContactPoint contact) + { + if (CollisionEventsThisFrame == null) + { + CollisionEventsThisFrame = new CollisionEventUpdate(); + } + CollisionEventsThisFrame.addCollider(collideWith, contact); + } + + public void SendCollisions() + { + if (m_eventsubscription >= m_requestedUpdateFrequency) + { + if (CollisionEventsThisFrame != null) + { + base.SendCollisionUpdate(CollisionEventsThisFrame); + } + CollisionEventsThisFrame = new CollisionEventUpdate(); + m_eventsubscription = 0; + } + return; + } + internal void Dispose() { if (Body.isInWorld()) diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs index 920ed96ee7..dc3229a752 100644 --- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs +++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs @@ -154,7 +154,8 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin private Vector3 _target_velocity; public int m_eventsubscription; - // private CollisionEventUpdate CollisionEventsThisFrame = null; + private int m_requestedUpdateFrequency = 0; + private CollisionEventUpdate CollisionEventsThisFrame = null; public volatile bool childPrim; @@ -595,6 +596,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin public override void SubscribeEvents(int ms) { m_eventsubscription = ms; + m_requestedUpdateFrequency = ms; _parent_scene.addCollisionEventReporting(this); } @@ -602,6 +604,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin { _parent_scene.remCollisionEventReporting(this); m_eventsubscription = 0; + m_requestedUpdateFrequency = 0; } public override bool SubscribedEvents() @@ -611,7 +614,28 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin #endregion + public void AddCollision(uint collideWith, ContactPoint contact) + { + if (CollisionEventsThisFrame == null) + { + CollisionEventsThisFrame = new CollisionEventUpdate(); + } + CollisionEventsThisFrame.addCollider(collideWith, contact); + } + public void SendCollisions() + { + if (m_eventsubscription >= m_requestedUpdateFrequency) + { + if (CollisionEventsThisFrame != null) + { + base.SendCollisionUpdate(CollisionEventsThisFrame); + } + CollisionEventsThisFrame = null; + // m_eventsubscription = 0; + } + return; + } internal void Dispose() { @@ -759,7 +783,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin { if (m_taintadd) { - m_log.Debug("[PHYSICS]: TaintAdd"); + // m_log.Debug("[PHYSICS]: TaintAdd"); changeadd(timestep); } @@ -771,7 +795,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin SetBody(Mass); else SetBody(0); - m_log.Debug("[PHYSICS]: GEOM_DOESNT_EXSIT"); + // m_log.Debug("[PHYSICS]: GEOM_DOESNT_EXSIT"); } if (prim_geom.Handle == IntPtr.Zero) @@ -782,31 +806,31 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin SetBody(Mass); else SetBody(0); - m_log.Debug("[PHYSICS]: GEOM_DOESNT_EXSIT"); + // m_log.Debug("[PHYSICS]: GEOM_DOESNT_EXSIT"); } if (!_position.ApproxEquals(m_taintposition, 0f)) { - m_log.Debug("[PHYSICS]: TaintMove"); + // m_log.Debug("[PHYSICS]: TaintMove"); changemove(timestep); } if (m_taintrot != _orientation) { - m_log.Debug("[PHYSICS]: TaintRotate"); + // m_log.Debug("[PHYSICS]: TaintRotate"); rotate(timestep); } // if (m_taintPhysics != m_isphysical && !(m_taintparent != _parent)) { - m_log.Debug("[PHYSICS]: TaintPhysics"); + // m_log.Debug("[PHYSICS]: TaintPhysics"); changePhysicsStatus(timestep); } // if (!_size.ApproxEquals(m_taintsize, 0f)) { - m_log.Debug("[PHYSICS]: TaintSize"); + // m_log.Debug("[PHYSICS]: TaintSize"); changesize(timestep); } @@ -814,43 +838,43 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin if (m_taintshape) { - m_log.Debug("[PHYSICS]: TaintShape"); + // m_log.Debug("[PHYSICS]: TaintShape"); changeshape(timestep); } // if (m_taintforce) { - m_log.Debug("[PHYSICS]: TaintForce"); + // m_log.Debug("[PHYSICS]: TaintForce"); changeAddForce(timestep); } if (m_taintaddangularforce) { - m_log.Debug("[PHYSICS]: TaintAngularForce"); + // m_log.Debug("[PHYSICS]: TaintAngularForce"); changeAddAngularForce(timestep); } if (!m_taintTorque.ApproxEquals(Vector3.Zero, 0.001f)) { - m_log.Debug("[PHYSICS]: TaintTorque"); + // m_log.Debug("[PHYSICS]: TaintTorque"); changeSetTorque(timestep); } if (m_taintdisable) { - m_log.Debug("[PHYSICS]: TaintDisable"); + // m_log.Debug("[PHYSICS]: TaintDisable"); changedisable(timestep); } if (m_taintselected != m_isSelected) { - m_log.Debug("[PHYSICS]: TaintSelected"); + // m_log.Debug("[PHYSICS]: TaintSelected"); changeSelectedStatus(timestep); } if (!m_taintVelocity.ApproxEquals(Vector3.Zero, 0.001f)) { - m_log.Debug("[PHYSICS]: TaintVelocity"); + // m_log.Debug("[PHYSICS]: TaintVelocity"); changevelocity(timestep); } if (m_taintparent != _parent) { - m_log.Debug("[PHYSICS]: TaintLink"); + // m_log.Debug("[PHYSICS]: TaintLink"); changelink(timestep); } if (m_taintCollidesWater != m_collidesWater) @@ -859,7 +883,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin } if (!m_angularlock.ApproxEquals(m_taintAngularLock, 0)) { - m_log.Debug("[PHYSICS]: TaintAngularLock"); + // m_log.Debug("[PHYSICS]: TaintAngularLock"); changeAngularLock(timestep); } if (m_taintremove) @@ -917,7 +941,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin private void changemove(float timestep) { - m_log.Debug("[PHYSICS]: _________ChangeMove"); + // m_log.Debug("[PHYSICS]: _________ChangeMove"); if (!m_isphysical) { tempTransform2 = Body.getWorldTransform(); @@ -977,7 +1001,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin private void rotate(float timestep) { - m_log.Debug("[PHYSICS]: _________ChangeRotate"); + // m_log.Debug("[PHYSICS]: _________ChangeRotate"); tempTransform2 = Body.getWorldTransform(); tempOrientation2 = new btQuaternion(_orientation.X, _orientation.Y, _orientation.Z, _orientation.W); tempTransform2.setRotation(tempOrientation2); @@ -1000,7 +1024,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin //Body = null; // TODO: dispose parts that make up body } - m_log.Debug("[PHYSICS]: _________ChangePhysics"); + // m_log.Debug("[PHYSICS]: _________ChangePhysics"); ProcessGeomCreation(); @@ -1092,7 +1116,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin // TODO: dispose parts that make up body } - m_log.Debug("[PHYSICS]: _________ChangeSize"); + // m_log.Debug("[PHYSICS]: _________ChangeSize"); SetCollisionShape(null); // Construction of new prim ProcessGeomCreation(); @@ -1297,13 +1321,13 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin // TODO: throw new NotImplementedException(); if (m_taintselected) { - Body.setCollisionFlags((int)ContactFlags.CF_NO_CONTACT_RESPONSE); + // Body.setCollisionFlags((int)ContactFlags.CF_NO_CONTACT_RESPONSE); disableBodySoft(); } else { - Body.setCollisionFlags(0 | (int)ContactFlags.CF_CUSTOM_MATERIAL_CALLBACK); + // Body.setCollisionFlags(0 | (int)ContactFlags.CF_CUSTOM_MATERIAL_CALLBACK); enableBodySoft(); } m_isSelected = m_taintselected; @@ -1605,6 +1629,11 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin enableBodySoft(); } */ + if (!Body.isActive()) + { + Body.clearForces(); + enableBodySoft(); + } // 35x10 = 350n times the mass per second applied maximum. float nmax = 35f * m_mass; @@ -1632,6 +1661,12 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin Body.applyCentralImpulse(tempAddForce); } } + else + { + // if no forces on the prim, make sure everything is zero + Body.clearForces(); + enableBodySoft(); + } } else { @@ -1985,7 +2020,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin public void CreateGeom(IntPtr m_targetSpace, IMesh p_mesh) { - m_log.Debug("[PHYSICS]: _________CreateGeom"); + // m_log.Debug("[PHYSICS]: _________CreateGeom"); if (p_mesh != null) { //_mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); @@ -2042,7 +2077,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin // TODO: Set Collision Body Mesh // This sleeper is there to moderate how long it takes between // setting up the mesh and pre-processing it when we get rapid fire mesh requests on a single object - m_log.Debug("_________SetMesh"); + // m_log.Debug("_________SetMesh"); Thread.Sleep(10); //Kill Body so that mesh can re-make the geom @@ -2159,7 +2194,14 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin // Body = new btRigidBody(mass, tempMotionState1, prim_geom); //else - Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1); + // Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1); + if (Body == null) + { + Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1); + // add localID so we can later map bullet object back to OpenSim object + Body.setUserPointer(new IntPtr((int)m_localID)); + } + if (prim_geom is btGImpactMeshShape) { @@ -2250,7 +2292,13 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin // Body = new btRigidBody(mass, tempMotionState1, prim_geom); //else - Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1); + // Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1); + if (Body == null) + { + Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1); + // each body has the localID stored into it so we can identify collision objects + Body.setUserPointer(new IntPtr((int)m_localID)); + } if (prim_geom is btGImpactMeshShape) { diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETScene.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETScene.cs index 9e048ab69c..85e34c1e3d 100644 --- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETScene.cs +++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETScene.cs @@ -47,7 +47,9 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin // private string m_sceneIdentifier = string.Empty; private List m_characters = new List(); + private Dictionary m_charactersLocalID = new Dictionary(); private List m_prims = new List(); + private Dictionary m_primsLocalID = new Dictionary(); private List m_activePrims = new List(); private List m_taintedActors = new List(); private btDiscreteDynamicsWorld m_world; @@ -134,7 +136,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); m_world = new btDiscreteDynamicsWorld(m_dispatcher, m_broadphase, m_solver, m_collisionConfiguration); m_world.setGravity(m_gravity); - //EnableCollisionInterface(); + EnableCollisionInterface(); } @@ -145,7 +147,16 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin avCapRadius, avStandupTensor, avDensity, avHeightFudgeFactor, avMovementDivisorWalk, avMovementDivisorRun); - m_characters.Add(chr); + try + { + m_characters.Add(chr); + m_charactersLocalID.Add(chr.m_localID, chr); + } + catch + { + // noop if it's already there + m_log.Debug("[PHYSICS] BulletDotNet: adding duplicate avatar localID"); + } AddPhysicsActorTaint(chr); return chr; } @@ -154,6 +165,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin { BulletDotNETCharacter chr = (BulletDotNETCharacter) actor; + m_charactersLocalID.Remove(chr.m_localID); m_characters.Remove(chr); m_world.removeRigidBody(chr.Body); m_world.removeCollisionObject(chr.Body); @@ -279,7 +291,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin prim.Move(timeStep); } } - float steps = m_world.stepSimulation(timeStep * 1000, 10, WorldTimeComp); + float steps = m_world.stepSimulation(timeStep, 10, WorldTimeComp); foreach (BulletDotNETCharacter chr in m_characters) { @@ -296,20 +308,67 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin } if (m_CollisionInterface != null) { - List collisions = m_CollisionInterface.GetContactList(); - lock (collisions) + List primsWithCollisions = new List(); + List charactersWithCollisions = new List(); + + // get the collisions that happened this tick + List collisions = m_CollisionInterface.GetContactList(); + // passed back the localID of the prim so we can associate the prim + foreach (BulletDotNET.ContactAddedCallbackHandler.ContactInfo ci in collisions) { - foreach (int pvalue in collisions) - { - System.Console.Write(string.Format("{0} ", pvalue)); - } + // ContactPoint = { contactPoint, contactNormal, penetrationDepth } + ContactPoint contact = new ContactPoint(new Vector3(ci.pX, ci.pY, ci.pZ), + new Vector3(ci.nX, ci.nY, ci.nZ), ci.depth); + + ProcessContact(ci.contact, ci.contactWith, contact, ref primsWithCollisions, ref charactersWithCollisions); + ProcessContact(ci.contactWith, ci.contact, contact, ref primsWithCollisions, ref charactersWithCollisions); + } m_CollisionInterface.Clear(); - + // for those prims and characters that had collisions cause collision events + foreach (BulletDotNETPrim bdnp in primsWithCollisions) + { + bdnp.SendCollisions(); + } + foreach (BulletDotNETCharacter bdnc in charactersWithCollisions) + { + bdnc.SendCollisions(); + } } return steps; } + private void ProcessContact(uint cont, uint contWith, ContactPoint contact, + ref List primsWithCollisions, + ref List charactersWithCollisions) + { + BulletDotNETPrim bdnp; + // collisions with a normal prim? + if (m_primsLocalID.TryGetValue(cont, out bdnp)) + { + // Added collision event to the prim. This creates a pile of events + // that will be sent to any subscribed listeners. + bdnp.AddCollision(contWith, contact); + if (!primsWithCollisions.Contains(bdnp)) + { + primsWithCollisions.Add(bdnp); + } + } + else + { + BulletDotNETCharacter bdnc; + // if not a prim, maybe it's one of the characters + if (m_charactersLocalID.TryGetValue(cont, out bdnc)) + { + bdnc.AddCollision(contWith, contact); + if (!charactersWithCollisions.Contains(bdnc)) + { + charactersWithCollisions.Add(bdnc); + } + } + } + } + public override void GetResults() { @@ -387,6 +446,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin m_terrainTransform = new btTransform(QuatIdentity, m_terrainPosition); m_terrainMotionState = new btDefaultMotionState(m_terrainTransform); TerrainBody = new btRigidBody(0, m_terrainMotionState, m_terrainShape); + TerrainBody.setUserPointer((IntPtr)0); m_world.addRigidBody(TerrainBody); @@ -459,6 +519,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin { lock (m_prims) { + m_primsLocalID.Clear(); foreach (BulletDotNETPrim prim in m_prims) { if (prim.Body != null) @@ -513,6 +574,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin m_world.removeRigidBody(body); } remActivePrim(prm); + m_primsLocalID.Remove(prm.m_localID); m_prims.Remove(prm); } @@ -686,9 +748,18 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin { if (!m_prims.Contains(pPrim)) { - m_prims.Add(pPrim); + try + { + m_prims.Add(pPrim); + m_primsLocalID.Add(pPrim.m_localID, pPrim); + } + catch + { + // noop if it's already there + m_log.Debug("[PHYSICS] BulletDotNet: adding duplicate prim localID"); + } m_world.addRigidBody(pPrim.Body); - m_log.Debug("ADDED"); + // m_log.Debug("[PHYSICS] added prim to scene"); } } } @@ -696,8 +767,8 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin { if (m_CollisionInterface == null) { - m_CollisionInterface = new ContactAddedCallbackHandler(); - m_world.SetCollisionAddedCallback(m_CollisionInterface); + m_CollisionInterface = new ContactAddedCallbackHandler(m_world); + // m_world.SetCollisionAddedCallback(m_CollisionInterface); } } diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 03736d157b..0720b5ee53 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -1575,11 +1575,11 @@ Console.WriteLine(" JointCreateFixed"); { //Console.WriteLine("Move " + m_primName); if (!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009 - /* // NON-'VEHICLES' are dealt with here if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f)) { d.Vector3 avel2 = d.BodyGetAngularVel(Body); + /* if (m_angularlock.X == 1) avel2.X = 0; if (m_angularlock.Y == 1) @@ -1587,8 +1587,8 @@ Console.WriteLine(" JointCreateFixed"); if (m_angularlock.Z == 1) avel2.Z = 0; d.BodySetAngularVel(Body, avel2.X, avel2.Y, avel2.Z); + */ } - */ //float PID_P = 900.0f; float m_mass = CalculateMass(); diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs index 3f00534700..7cb075e803 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs @@ -85,24 +85,27 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - IConfig gridConfig = source.Configs["AssetService"]; - if (gridConfig == null) + if (Simian.IsSimianEnabled(source, "AssetServices")) { - m_log.Error("[ASSET CONNECTOR]: AssetService missing from OpenSim.ini"); - throw new Exception("Asset connector init error"); + IConfig gridConfig = source.Configs["AssetService"]; + if (gridConfig == null) + { + m_log.Error("[ASSET CONNECTOR]: AssetService missing from OpenSim.ini"); + throw new Exception("Asset connector init error"); + } + + string serviceUrl = gridConfig.GetString("AssetServerURI"); + if (String.IsNullOrEmpty(serviceUrl)) + { + m_log.Error("[ASSET CONNECTOR]: No AssetServerURI in section AssetService"); + throw new Exception("Asset connector init error"); + } + + if (!serviceUrl.EndsWith("/")) + serviceUrl = serviceUrl + '/'; + + m_serverUrl = serviceUrl; } - - string serviceUrl = gridConfig.GetString("AssetServerURI"); - if (String.IsNullOrEmpty(serviceUrl)) - { - m_log.Info("[ASSET CONNECTOR]: No AssetServerURI in section AssetService, skipping SimianAssetServiceConnector"); - return; - } - - if (!serviceUrl.EndsWith("/")) - serviceUrl = serviceUrl + '/'; - - m_serverUrl = serviceUrl; } #region IAssetService diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAuthenticationServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAuthenticationServiceConnector.cs index 0876efbaf0..6317b8711e 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianAuthenticationServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianAuthenticationServiceConnector.cs @@ -73,21 +73,24 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - IConfig assetConfig = source.Configs["AuthenticationService"]; - if (assetConfig == null) + if (Simian.IsSimianEnabled(source, "AuthenticationServices")) { - m_log.Error("[AUTH CONNECTOR]: AuthenticationService missing from OpenSim.ini"); - throw new Exception("Authentication connector init error"); - } + IConfig assetConfig = source.Configs["AuthenticationService"]; + if (assetConfig == null) + { + m_log.Error("[AUTH CONNECTOR]: AuthenticationService missing from OpenSim.ini"); + throw new Exception("Authentication connector init error"); + } - string serviceURI = assetConfig.GetString("AuthenticationServerURI"); - if (String.IsNullOrEmpty(serviceURI)) - { - m_log.Info("[AUTH CONNECTOR]: No Server URI named in section AuthenticationService, skipping SimianAuthenticationServiceConnector"); - return; - } + string serviceURI = assetConfig.GetString("AuthenticationServerURI"); + if (String.IsNullOrEmpty(serviceURI)) + { + m_log.Error("[AUTH CONNECTOR]: No Server URI named in section AuthenticationService"); + throw new Exception("Authentication connector init error"); + } - m_serverUrl = serviceURI; + m_serverUrl = serviceURI; + } } public string Authenticate(UUID principalID, string password, int lifetime) diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs index 697bb43132..a18cb2286e 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs @@ -78,24 +78,27 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - IConfig gridConfig = source.Configs["AvatarService"]; - if (gridConfig == null) + if (Simian.IsSimianEnabled(source, "AvatarServices")) { - m_log.Error("[AVATAR CONNECTOR]: AvatarService missing from OpenSim.ini"); - throw new Exception("Avatar connector init error"); + IConfig gridConfig = source.Configs["AvatarService"]; + if (gridConfig == null) + { + m_log.Error("[AVATAR CONNECTOR]: AvatarService missing from OpenSim.ini"); + throw new Exception("Avatar connector init error"); + } + + string serviceUrl = gridConfig.GetString("AvatarServerURI"); + if (String.IsNullOrEmpty(serviceUrl)) + { + m_log.Error("[AVATAR CONNECTOR]: No AvatarServerURI in section AvatarService"); + throw new Exception("Avatar connector init error"); + } + + if (!serviceUrl.EndsWith("/")) + serviceUrl = serviceUrl + '/'; + + m_serverUrl = serviceUrl; } - - string serviceUrl = gridConfig.GetString("AvatarServerURI"); - if (String.IsNullOrEmpty(serviceUrl)) - { - m_log.Info("[AVATAR CONNECTOR]: No AvatarServerURI in section AvatarService, skipping SimianAvatarServiceConnector"); - return; - } - - if (!serviceUrl.EndsWith("/")) - serviceUrl = serviceUrl + '/'; - - m_serverUrl = serviceUrl; } #region IAvatarService diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs index abb98a3389..b3ecc7e907 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs @@ -76,21 +76,24 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - IConfig assetConfig = source.Configs["FriendsService"]; - if (assetConfig == null) + if (Simian.IsSimianEnabled(source, "FriendsServices")) { - m_log.Error("[FRIENDS CONNECTOR]: FriendsService missing from OpenSim.ini"); - throw new Exception("Friends connector init error"); - } + IConfig assetConfig = source.Configs["FriendsService"]; + if (assetConfig == null) + { + m_log.Error("[FRIENDS CONNECTOR]: FriendsService missing from OpenSim.ini"); + throw new Exception("Friends connector init error"); + } - string serviceURI = assetConfig.GetString("FriendsServerURI"); - if (String.IsNullOrEmpty(serviceURI)) - { - m_log.Info("[FRIENDS CONNECTOR]: No Server URI named in section FriendsService, skipping SimianFriendsServiceConnector"); - return; - } + string serviceURI = assetConfig.GetString("FriendsServerURI"); + if (String.IsNullOrEmpty(serviceURI)) + { + m_log.Error("[FRIENDS CONNECTOR]: No Server URI named in section FriendsService"); + throw new Exception("Friends connector init error"); + } - m_serverUrl = serviceURI; + m_serverUrl = serviceURI; + } } #region IFriendsService diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGrid.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGrid.cs index 41ed2f1646..c3de98ef58 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianGrid.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianGrid.cs @@ -25,7 +25,23 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System; using Mono.Addins; +using Nini.Config; [assembly: Addin("SimianGrid", "1.0")] [assembly: AddinDependency("OpenSim", "0.5")] + +public static class Simian +{ + public static bool IsSimianEnabled(IConfigSource config, string moduleName) + { + if (config.Configs["Modules"] != null) + { + string module = config.Configs["Modules"].GetString("AuthenticationServices"); + return !String.IsNullOrEmpty(module) && module.Contains("Simian"); + } + + return false; + } +} \ No newline at end of file diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs index ef943ec7cd..eebdf14b92 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs @@ -80,21 +80,24 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - IConfig gridConfig = source.Configs["GridService"]; - if (gridConfig == null) + if (Simian.IsSimianEnabled(source, "GridServices")) { - m_log.Error("[GRID CONNECTOR]: GridService missing from OpenSim.ini"); - throw new Exception("Grid connector init error"); - } + IConfig gridConfig = source.Configs["GridService"]; + if (gridConfig == null) + { + m_log.Error("[GRID CONNECTOR]: GridService missing from OpenSim.ini"); + throw new Exception("Grid connector init error"); + } - string serviceUrl = gridConfig.GetString("GridServerURI"); - if (String.IsNullOrEmpty(serviceUrl)) - { - m_log.Info("[GRID CONNECTOR]: No Server URI named in section GridService, skipping SimianGridServiceConnector"); - return; - } + string serviceUrl = gridConfig.GetString("GridServerURI"); + if (String.IsNullOrEmpty(serviceUrl)) + { + m_log.Error("[GRID CONNECTOR]: No Server URI named in section GridService"); + throw new Exception("Grid connector init error"); + } - m_serverUrl = serviceUrl; + m_serverUrl = serviceUrl; + } } #region IGridService diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs index a41e493c0c..891782fdad 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs @@ -92,23 +92,38 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - IConfig gridConfig = source.Configs["InventoryService"]; - if (gridConfig == null) + if (Simian.IsSimianEnabled(source, "InventoryServices")) { - m_log.Error("[INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini"); - throw new Exception("Inventory connector init error"); + IConfig gridConfig = source.Configs["InventoryService"]; + if (gridConfig == null) + { + m_log.Error("[INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini"); + throw new Exception("Inventory connector init error"); + } + + string serviceUrl = gridConfig.GetString("InventoryServerURI"); + if (String.IsNullOrEmpty(serviceUrl)) + { + m_log.Error("[INVENTORY CONNECTOR]: No Server URI named in section InventoryService"); + throw new Exception("Inventory connector init error"); + } + + m_serverUrl = serviceUrl; + + gridConfig = source.Configs["UserAccountService"]; + if (gridConfig != null) + { + serviceUrl = gridConfig.GetString("UserAccountServerURI"); + if (!String.IsNullOrEmpty(serviceUrl)) + m_userServerUrl = serviceUrl; + else + m_log.Info("[INVENTORY CONNECTOR]: No Server URI named in section UserAccountService"); + } + else + { + m_log.Warn("[INVENTORY CONNECTOR]: UserAccountService missing from OpenSim.ini"); + } } - - string serviceUrl = gridConfig.GetString("InventoryServerURI"); - if (String.IsNullOrEmpty(serviceUrl)) - { - m_log.Info("[INVENTORY CONNECTOR]: No Server URI named in section InventoryService, skipping SimianInventoryServiceConnector"); - return; - } - - // FIXME: Get the user server URL too - - m_serverUrl = serviceUrl; } /// diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs index fa387ba695..1b5edf4ba2 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs @@ -104,21 +104,24 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - IConfig gridConfig = source.Configs["PresenceService"]; - if (gridConfig == null) + if (Simian.IsSimianEnabled(source, "PresenceServices")) { - m_log.Error("[PRESENCE CONNECTOR]: PresenceService missing from OpenSim.ini"); - throw new Exception("Presence connector init error"); - } + IConfig gridConfig = source.Configs["PresenceService"]; + if (gridConfig == null) + { + m_log.Error("[PRESENCE CONNECTOR]: PresenceService missing from OpenSim.ini"); + throw new Exception("Presence connector init error"); + } - string serviceUrl = gridConfig.GetString("PresenceServerURI"); - if (String.IsNullOrEmpty(serviceUrl)) - { - m_log.Info("[PRESENCE CONNECTOR]: No PresenceServerURI in section PresenceService, skipping SimianPresenceServiceConnector"); - return; - } + string serviceUrl = gridConfig.GetString("PresenceServerURI"); + if (String.IsNullOrEmpty(serviceUrl)) + { + m_log.Error("[PRESENCE CONNECTOR]: No PresenceServerURI in section PresenceService"); + throw new Exception("Presence connector init error"); + } - m_serverUrl = serviceUrl; + m_serverUrl = serviceUrl; + } } #region IPresenceService diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs b/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs index 3c937258c8..9c226fb5b0 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs @@ -88,24 +88,27 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - IConfig gridConfig = source.Configs["UserAccountService"]; - if (gridConfig == null) + if (Simian.IsSimianEnabled(source, "UserAccountServices")) { - m_log.Error("[PROFILES]: UserAccountService missing from OpenSim.ini"); - throw new Exception("Profiles init error"); + IConfig gridConfig = source.Configs["UserAccountService"]; + if (gridConfig == null) + { + m_log.Error("[PROFILES]: UserAccountService missing from OpenSim.ini"); + throw new Exception("Profiles init error"); + } + + string serviceUrl = gridConfig.GetString("UserAccountServerURI"); + if (String.IsNullOrEmpty(serviceUrl)) + { + m_log.Error("[PROFILES]: No UserAccountServerURI in section UserAccountService"); + throw new Exception("Profiles init error"); + } + + if (!serviceUrl.EndsWith("/")) + serviceUrl = serviceUrl + '/'; + + m_serverUrl = serviceUrl; } - - string serviceUrl = gridConfig.GetString("UserAccountServerURI"); - if (String.IsNullOrEmpty(serviceUrl)) - { - m_log.Info("[PROFILES]: No UserAccountServerURI in section UserAccountService, skipping SimianProfiles"); - return; - } - - if (!serviceUrl.EndsWith("/")) - serviceUrl = serviceUrl + '/'; - - m_serverUrl = serviceUrl; } private void ClientConnectHandler(IClientCore clientCore) diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs index 3a35d9a7a0..bb0ac57b98 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs @@ -77,22 +77,25 @@ namespace OpenSim.Services.Connectors.SimianGrid public void Initialise(IConfigSource source) { - IConfig assetConfig = source.Configs["UserAccountService"]; - if (assetConfig == null) + if (Simian.IsSimianEnabled(source, "UserAccountServices")) { - m_log.Error("[ACCOUNT CONNECTOR]: UserAccountService missing from OpenSim.ini"); - throw new Exception("User account connector init error"); - } + IConfig assetConfig = source.Configs["UserAccountService"]; + if (assetConfig == null) + { + m_log.Error("[ACCOUNT CONNECTOR]: UserAccountService missing from OpenSim.ini"); + throw new Exception("User account connector init error"); + } - string serviceURI = assetConfig.GetString("UserAccountServerURI"); - if (String.IsNullOrEmpty(serviceURI)) - { - m_log.Info("[ACCOUNT CONNECTOR]: No UserAccountServerURI in section UserAccountService, skipping SimianUserAccountServiceConnector"); - return; - } + string serviceURI = assetConfig.GetString("UserAccountServerURI"); + if (String.IsNullOrEmpty(serviceURI)) + { + m_log.Error("[ACCOUNT CONNECTOR]: No UserAccountServerURI in section UserAccountService, skipping SimianUserAccountServiceConnector"); + throw new Exception("User account connector init error"); + } - m_accountCache = new ExpiringCache(); - m_serverUrl = serviceURI; + m_accountCache = new ExpiringCache(); + m_serverUrl = serviceURI; + } } public UserAccount GetUserAccount(UUID scopeID, string firstName, string lastName) diff --git a/bin/BulletDotNET.dll b/bin/BulletDotNET.dll index 8abe03a849dd6c09ce6d17851ffc0b35505ae749..40c43484721f11588300459121af3bedd09fbfb4 100644 GIT binary patch literal 58880 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 literal 58880 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 FzW^vnxoQ9a diff --git a/bin/Newtonsoft.Json.XML b/bin/Newtonsoft.Json.XML index 5af3593d22..1a1e56cef3 100644 --- a/bin/Newtonsoft.Json.XML +++ b/bin/Newtonsoft.Json.XML @@ -1,5827 +1,5827 @@ - - - - Newtonsoft.Json.Net20 - - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - - - - - Initializes a new instance of the class with the specified . - - - - - Reads the next JSON token from the stream. - - true if the next token was read successfully; false if there are no more tokens to read. - - - - Reads the next JSON token from the stream as a . - - A or a null reference if the next JSON token is null. - - - - Skips the children of the current token. - - - - - Sets the current token. - - The new token. - - - - Sets the current token and value. - - The new token. - The value. - - - - Sets the state based on current token type. - - - - - Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - - - - - Releases unmanaged and - optionally - managed resources - - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - - Changes the to Closed. - - - - - Gets the current reader state. - - The current reader state. - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - Gets the type of the current Json token. - - - - - Gets the text value of the current Json token. - - - - - Gets The Common Language Runtime (CLR) type for the current Json token. - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Specifies the state of the reader. - - - - - The Read method has not been called. - - - - - The end of the file has been reached successfully. - - - - - Reader is at a property. - - - - - Reader is at the start of an object. - - - - - Reader is in an object. - - - - - Reader is at the start of an array. - - - - - Reader is in an array. - - - - - The Close method has been called. - - - - - Reader has just read a value. - - - - - Reader is at the start of a constructor. - - - - - Reader in a constructor. - - - - - An error occurred that prevents the read operation from continuing. - - - - - The end of the file has been reached successfully. - - - - - Initializes a new instance of the class. - - The stream. - - - - Initializes a new instance of the class. - - The stream. - if set to true the root object will be read as a JSON array. - The used when reading values from BSON. - - - - Reads the next JSON token from the stream as a . - - - A or a null reference if the next JSON token is null. - - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Gets or sets a value indicating whether the root object will be read as a JSON array. - - - true if the root object will be read as a JSON array; otherwise, false. - - - - - Gets or sets the used when reading values from BSON. - - The used when reading values from BSON. - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - - - - - Creates an instance of the JsonWriter class. - - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a Json object. - - - - - Writes the end of a Json object. - - - - - Writes the beginning of a Json array. - - - - - Writes the end of an array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end constructor. - - - - - Writes the property name of a name/value pair on a Json object. - - The name of the property. - - - - Writes the end of the current Json object or array. - - - - - Writes the current token. - - The to read the token from. - - - - Writes the specified end token. - - The end token to write. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON without changing the writer's state. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - An error will raised if the value cannot be written as a single JSON token. - - The value to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes out the given white space. - - The string of white space characters. - - - - Gets the top. - - The top. - - - - Gets the state of the writer. - - - - - Indicates how the output is formatted. - - - - - Initializes a new instance of the class writing to the given . - - The container being written to. - - - - Initializes a new instance of the class. - - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a Json object. - - - - - Writes the beginning of a Json array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the end. - - The token. - - - - Writes the property name of a name/value pair on a Json object. - - The name of the property. - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Gets the token being writen. - - The token being writen. - - - - Initializes a new instance of the class. - - The stream. - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Writes the end. - - The token. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes raw JSON where a value is expected and updates the writer's state. - - The raw JSON to write. - - - - Specifies how constructors are used when initializing objects during deserialization by the . - - - - - First attempt to use the public default constructor then fall back to single paramatized constructor. - - - - - Allow Json.NET to use a non-public default constructor. - - - - - Converts a binary value to and from a base 64 string value. - - - - - Converts an object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Create a custom object - - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Creates an object which will then be populated by the serializer. - - Type of the object. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Converts a to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Provides a base class for converting a to and from JSON. - - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Converts an to and from its name string value. - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Determines whether this instance can convert the specified object type. - - Type of the object. - - true if this instance can convert the specified object type; otherwise, false. - - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The name. - Type of the property. - - - - When overridden in a derived class, returns whether resetting an object changes its value. - - - true if resetting the component changes its value; otherwise, false. - - The component to test for reset capability. - - - - - When overridden in a derived class, gets the current value of the property on a component. - - - The value of a property for a given component. - - The component with the property for which to retrieve the value. - - - - - When overridden in a derived class, resets the value for this property of the component to the default value. - - The component with the property value that is to be reset to the default value. - - - - - When overridden in a derived class, sets the value of the component to a different value. - - The component with the property value that is to be set. - The new value. - - - - - When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. - - - true if the property should be persisted; otherwise, false. - - The component with the property to be examined for persistence. - - - - - When overridden in a derived class, gets the type of the component this property is bound to. - - - A that represents the type of component this property is bound to. When the or methods are invoked, the object specified might be an instance of this type. - - - - - When overridden in a derived class, gets a value indicating whether this property is read-only. - - - true if the property is read-only; otherwise, false. - - - - - When overridden in a derived class, gets the type of the property. - - - A that represents the type of the property. - - - - - Gets the hash code for the name of the member. - - - - The hash code for the name of the member. - - - - - Represents a view of a . - - - - - Initializes a new instance of the class. - - The value. - - - - Returns the properties for this instance of a component. - - - A that represents the properties for this component instance. - - - - - Returns the properties for this instance of a component using the attribute array as a filter. - - An array of type that is used as a filter. - - A that represents the filtered properties for this component instance. - - - - - Returns a collection of custom attributes for this instance of a component. - - - An containing the attributes for this object. - - - - - Returns the class name of this instance of a component. - - - The class name of the object, or null if the class does not have a name. - - - - - Returns the name of this instance of a component. - - - The name of the object, or null if the object does not have a name. - - - - - Returns a type converter for this instance of a component. - - - A that is the converter for this object, or null if there is no for this object. - - - - - Returns the default event for this instance of a component. - - - An that represents the default event for this object, or null if this object does not have events. - - - - - Returns the default property for this instance of a component. - - - A that represents the default property for this object, or null if this object does not have properties. - - - - - Returns an editor of the specified type for this instance of a component. - - A that represents the editor for this object. - - An of the specified type that is the editor for this object, or null if the editor cannot be found. - - - - - Returns the events for this instance of a component using the specified attribute array as a filter. - - An array of type that is used as a filter. - - An that represents the filtered events for this component instance. - - - - - Returns the events for this instance of a component. - - - An that represents the events for this component instance. - - - - - Returns an object that contains the property described by the specified property descriptor. - - A that represents the property whose owner is to be found. - - An that represents the owner of the specified property. - - - - - Represents a raw JSON string. - - - - - Represents a value in JSON (string, integer, date, etc). - - - - - Represents an abstract JSON token. - - - - - Represents a collection of objects. - - The type of token - - - - Gets the with the specified key. - - - - - - Provides an interface to enable a class to return line and position information. - - - - - Gets a value indicating whether the class can return line information. - - - true if LineNumber and LinePosition can be provided; otherwise, false. - - - - - Gets the current line number. - - The current line number or 0 if no line information is available (for example, HasLineInfo returns false). - - - - Gets the current line position. - - The current line position or 0 if no line information is available (for example, HasLineInfo returns false). - - - - Compares the values of two tokens, including the values of all descendant tokens. - - The first to compare. - The second to compare. - true if the tokens are equal; otherwise false. - - - - Adds the specified content immediately after this token. - - A content object that contains simple content or a collection of content objects to be added after this token. - - - - Adds the specified content immediately before this token. - - A content object that contains simple content or a collection of content objects to be added before this token. - - - - Returns a collection of the ancestor tokens of this token. - - A collection of the ancestor tokens of this token. - - - - Returns a collection of the sibling tokens after this token, in document order. - - A collection of the sibling tokens after this tokens, in document order. - - - - Returns a collection of the sibling tokens before this token, in document order. - - A collection of the sibling tokens before this token, in document order. - - - - Gets the with the specified key converted to the specified type. - - The type to convert the token to. - The token key. - The converted token value. - - - - Returns a collection of the child tokens of this token, in document order. - - An of containing the child tokens of this , in document order. - - - - Returns a collection of the child tokens of this token, in document order, filtered by the specified type. - - The type to filter the child tokens on. - A containing the child tokens of this , in document order. - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - A containing the child values of this , in document order. - - - - Removes this token from its parent. - - - - - Replaces this token with the specified token. - - The value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Returns the indented JSON for this token. - - - The indented JSON for this token. - - - - - Returns the JSON for this token using the given formatting and converters. - - Indicates how the output is formatted. - A collection of which will be used when writing the token. - The JSON for this token using the given formatting and converters. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an explicit conversion from to . - - The value. - The result of the conversion. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Performs an implicit conversion from to . - - The value to create a from. - The initialized with the specified value. - - - - Creates an for this token. - - An that can be used to read this token and its descendants. - - - - Creates a from an object. - - The object that will be used to create . - A with the value of the specified object - - - - Creates a from an object using the specified . - - The object that will be used to create . - The that will be used when reading the object. - A with the value of the specified object - - - - Creates a from a . - - An positioned at the token to read into this . - - An that contains the token and its descendant tokens - that were read from the reader. The runtime type of the token is determined - by the token type of the first token encountered in the reader. - - - - - Selects the token that matches the object path. - - - The object path from the current to the - to be returned. This must be a string of property names or array indexes separated - by periods, such as Tables[0].DefaultView[0].Price in C# or - Tables(0).DefaultView(0).Price in Visual Basic. - - The that matches the object path or a null reference if no matching token is found. - - - - Selects the token that matches the object path. - - - The object path from the current to the - to be returned. This must be a string of property names or array indexes separated - by periods, such as Tables[0].DefaultView[0].Price in C# or - Tables(0).DefaultView(0).Price in Visual Basic. - - A flag to indicate whether an error should be thrown if no token is found. - The that matches the object path. - - - - Gets a comparer that can compare two tokens for value equality. - - A that can compare two nodes for value equality. - - - - Gets or sets the parent. - - The parent. - - - - Gets the root of this . - - The root of this . - - - - Gets the node type for this . - - The type. - - - - Gets a value indicating whether this token has childen tokens. - - - true if this token has child values; otherwise, false. - - - - - Gets the next sibling token of this node. - - The that contains the next sibling token. - - - - Gets the previous sibling token of this node. - - The that contains the previous sibling token. - - - - Gets the with the specified key. - - The with the specified key. - - - - Get the first child token of this token. - - A containing the first child token of the . - - - - Get the last child token of this token. - - A containing the last child token of the . - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Initializes a new instance of the class with the given value. - - The value. - - - - Creates a comment with the given value. - - The value. - A comment with the given value. - - - - Creates a string with the given value. - - The value. - A string with the given value. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Indicates whether the current object is equal to another object of the same type. - - - true if the current object is equal to the parameter; otherwise, false. - - An object to compare with this object. - - - - Determines whether the specified is equal to the current . - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - The parameter is null. - - - - - Serves as a hash function for a particular type. - - - A hash code for the current . - - - - - Gets a value indicating whether this token has childen tokens. - - - true if this token has child values; otherwise, false. - - - - - Gets the node type for this . - - The type. - - - - Gets or sets the underlying token value. - - The underlying token value. - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class. - - The raw json. - - - - Creates an instance of with the content of the reader's current token. - - The reader. - An instance of with the content of the reader's current token. - - - - Indicating whether a property is required. - - - - - The property is not required. The default state. - - - - - The property must be defined in JSON but can be a null value. - - - - - The property must be defined in JSON and cannot be a null value. - - - - - Used to resolve references when serializing and deserializing JSON by the . - - - - - Resolves a reference to its object. - - The reference to resolve. - The object that - - - - Gets the reference for the sepecified object. - - The object to get a reference for. - The reference to the object. - - - - Determines whether the specified object is referenced. - - The object to test for a reference. - - true if the specified object is referenced; otherwise, false. - - - - - Adds a reference to the specified object. - - The reference. - The object to reference. - - - - Specifies reference handling options for the . - - - - - Do not preserve references when serializing types. - - - - - Preserve references when serializing into a JSON object structure. - - - - - Preserve references when serializing into a JSON array structure. - - - - - Preserve references when serializing. - - - - - Instructs the how to serialize the collection. - - - - - Instructs the how to serialize the object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets the id. - - The id. - - - - Gets or sets the title. - - The title. - - - - Gets or sets the description. - - The description. - - - - Gets or sets a value that indicates whether to preserve object reference data. - - - true to keep object reference; otherwise, false. The default is false. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a flag indicating whether the array can contain null items - - A flag indicating whether the array can contain null items. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets a value indicating whether null items are allowed in the collection. - - true if null items are allowed in the collection; otherwise, false. - - - - Specifies default value handling options for the . - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Instructs the to use the specified when serializing the member or class. - - - - - Initializes a new instance of the class. - - Type of the converter. - - - - Gets the type of the converter. - - The type of the converter. - - - - Instructs the how to serialize the object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified member serialization. - - The member serialization. - - - - Initializes a new instance of the class with the specified container Id. - - The container Id. - - - - Gets or sets the member serialization. - - The member serialization. - - - - Specifies the settings on a object. - - - - - Initializes a new instance of the class. - - - - - Gets or sets how reference loops (e.g. a class referencing itself) is handled. - - Reference loop handling. - - - - Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - Missing member handling. - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how null values are handled during serialization and deserialization. - - Null value handling. - - - - Gets or sets how null default are handled during serialization and deserialization. - - The default value handling. - - - - Gets or sets a collection that will be used during serialization. - - The converters. - - - - Gets or sets how object references are preserved by the serializer. - - The preserve references handling. - - - - Gets or sets how type name writing and reading is handled by the serializer. - - The type name handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - The contract resolver. - - - - Gets or sets the used by the serializer when resolving references. - - The reference resolver. - - - - Gets or sets the used by the serializer when resolving type names. - - The binder. - - - - Gets or sets the error handler called during serialization and deserialization. - - The error handler called during serialization and deserialization. - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Represents a reader that provides validation. - - - - - Initializes a new instance of the class that - validates the content returned from the given . - - The to read from while validating. - - - - Reads the next JSON token from the stream as a . - - - A or a null reference if the next JSON token is null. - - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Sets an event handler for receiving schema validation errors. - - - - - Gets the text value of the current Json token. - - - - - - Gets the depth of the current token in the JSON document. - - The depth of the current token in the JSON document. - - - - Gets the quotation mark character used to enclose the value of a string. - - - - - - Gets the type of the current Json token. - - - - - - Gets The Common Language Runtime (CLR) type for the current Json token. - - - - - - Gets or sets the schema. - - The schema. - - - - Gets the used to construct this . - - The specified in the constructor. - - - - Compares tokens to determine whether they are equal. - - - - - Determines whether the specified objects are equal. - - The first object of type to compare. - The second object of type to compare. - - true if the specified objects are equal; otherwise, false. - - - - - Returns a hash code for the specified object. - - The for which a hash code is to be returned. - A hash code for the specified object. - The type of is a reference type and is null. - - - - Specifies the member serialization options for the . - - - - - All members are serialized by default. Members can be excluded using the . - - - - - Only members must be marked with the are serialized. - - - - - Specifies how object creation is handled by the . - - - - - Reuse existing objects, create new objects when needed. - - - - - Only reuse existing objects. - - - - - Always create new objects. - - - - - Converts a to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Gets or sets the date time styles used when converting a date to and from JSON. - - The date time styles used when converting a date to and from JSON. - - - - Gets or sets the date time format used when converting a date to and from JSON. - - The date time format used when converting a date to and from JSON. - - - - Gets or sets the culture used when converting a date to and from JSON. - - The culture used when converting a date to and from JSON. - - - - Converts a to and from a JavaScript date constructor (e.g. new Date(52231943)). - - - - - Writes the JSON representation of the object. - - The to write to. - The value. - The calling serializer. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Specifies whether a DateTime object represents a local time, a Coordinated Universal Time (UTC), or is not specified as either local time or UTC. - - - - - The time represented is local time. - - - - - The time represented is UTC. - - - - - The time represented is not specified as either local time or Coordinated Universal Time (UTC). - - - - - Preserves the DateTimeKind field of a date when a DateTime object is converted to a string and the string is then converted back to a DateTime object. - - - - - Converts an to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Checks if the attributeName is a namespace attribute. - - Attribute name to test. - The attribute name prefix if it has one, otherwise an empty string. - True if attribute name is for a namespace attribute, otherwise false. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. - - The name of the deserialize root element. - - - - Converts a object to and from JSON. - - - - - Writes the JSON representation of the object. - - The to write to. - The calling serializer. - The value. - - - - Determines whether this instance can convert the specified value type. - - Type of the value. - - true if this instance can convert the specified value type; otherwise, false. - - - - - Reads the JSON representation of the object. - - The to read from. - Type of the object. - The calling serializer. - The object value. - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - - - - - Initializes a new instance of the class with the specified . - - The TextReader containing the XML data to read. - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Reads the next JSON token from the stream as a . - - - A or a null reference if the next JSON token is null. - - - - - Changes the state to closed. - - - - - Gets a value indicating whether the class can return line information. - - - true if LineNumber and LinePosition can be provided; otherwise, false. - - - - - Gets the current line number. - - - The current line number or 0 if no line information is available (for example, HasLineInfo returns false). - - - - - Gets the current line position. - - - The current line position or 0 if no line information is available (for example, HasLineInfo returns false). - - - - - Instructs the to always serialize the member with the specified name. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with the specified name. - - Name of the property. - - - - Gets or sets the null value handling used when serializing this property. - - The null value handling. - - - - Gets or sets the default value handling used when serializing this property. - - The default value handling. - - - - Gets or sets the reference loop handling used when serializing this property. - - The reference loop handling. - - - - Gets or sets the object creation handling used when deserializing this property. - - The object creation handling. - - - - Gets or sets whether this property's value is serialized as a reference. - - Whether this property's value is serialized as a reference. - - - - Gets or sets the name of the property. - - The name of the property. - - - - Gets or sets a value indicating whether this property is required. - - - A value indicating whether this property is required. - - - - - Instructs the not to serialize the public field or public read/write property value. - - - - - Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. - - - - - Creates an instance of the JsonWriter class using the specified . - - The TextWriter to write to. - - - - Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. - - - - - Closes this stream and the underlying stream. - - - - - Writes the beginning of a Json object. - - - - - Writes the beginning of a Json array. - - - - - Writes the start of a constructor with the given name. - - The name of the constructor. - - - - Writes the specified end token. - - The end token to write. - - - - Writes the property name of a name/value pair on a Json object. - - The name of the property. - - - - Writes indent characters. - - - - - Writes the JSON value delimiter. - - - - - Writes an indent space. - - - - - Writes a null value. - - - - - Writes an undefined value. - - - - - Writes raw JSON. - - The raw JSON to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes a value. - - The value to write. - - - - Writes out a comment /*...*/ containing the specified text. - - Text to place inside the comment. - - - - Writes out the given white space. - - The string of white space characters. - - - - Gets or sets how many IndentChars to write for each level in the hierarchy when is set to Formatting.Indented. - - - - - Gets or sets which character to use to quote attribute values. - - - - - Gets or sets which character to use for indenting when is set to Formatting.Indented. - - - - - Gets or sets a value indicating whether object names will be surrounded with quotes. - - - - - The exception thrown when an error occurs while reading Json text. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - The exception thrown when an error occurs while reading Json text. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Represents a collection of . - - - - - Provides methods for converting between common language runtime types and JSON types. - - - - - Represents JavaScript's boolean value true as a string. This field is read-only. - - - - - Represents JavaScript's boolean value false as a string. This field is read-only. - - - - - Represents JavaScript's null as a string. This field is read-only. - - - - - Represents JavaScript's undefined as a string. This field is read-only. - - - - - Represents JavaScript's positive infinity as a string. This field is read-only. - - - - - Represents JavaScript's negative infinity as a string. This field is read-only. - - - - - Represents JavaScript's NaN as a string. This field is read-only. - - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - The string delimiter character. - A JSON string representation of the . - - - - Converts the to its JSON string representation. - - The value to convert. - A JSON string representation of the . - - - - Serializes the specified object to a JSON string. - - The object to serialize. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string. - - The object to serialize. - Indicates how the output is formatted. - - A JSON string representation of the object. - - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - A collection converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - Indicates how the output is formatted. - A collection converters used while serializing. - A JSON string representation of the object. - - - - Serializes the specified object to a JSON string using a collection of . - - The object to serialize. - Indicates how the output is formatted. - The used to serialize the object. - If this is null, default serialization settings will be is used. - - A JSON string representation of the object. - - - - - Deserializes the specified object to a Json object. - - The object to deserialize. - The deserialized object from the Json string. - - - - Deserializes the specified object to a Json object. - - The object to deserialize. - The of object being deserialized. - The deserialized object from the Json string. - - - - Deserializes the specified object to a Json object. - - The type of the object to deserialize. - The object to deserialize. - The deserialized object from the Json string. - - - - Deserializes the specified JSON to the given anonymous type. - - - The anonymous type to deserialize to. This can't be specified - traditionally and must be infered from the anonymous type passed - as a parameter. - - The object to deserialize. - The anonymous type object. - The deserialized anonymous type from the JSON string. - - - - Deserializes the JSON string to the specified type. - - The type of the object to deserialize. - The object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON string to the specified type. - - The type of the object to deserialize. - The object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be is used. - - The deserialized object from the JSON string. - - - - Deserializes the JSON string to the specified type. - - The object to deserialize. - The type of the object to deserialize. - Converters to use while deserializing. - The deserialized object from the JSON string. - - - - Deserializes the JSON string to the specified type. - - The JSON to deserialize. - The type of the object to deserialize. - - The used to deserialize the object. - If this is null, default serialization settings will be is used. - - The deserialized object from the JSON string. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - - - Populates the object with values from the JSON string. - - The JSON to populate values from. - The target object to populate values onto. - - The used to deserialize the object. - If this is null, default serialization settings will be is used. - - - - - Serializes the XML node to a JSON string. - - The node to serialize. - A JSON string of the XmlNode. - - - - Deserializes the XmlNode from a JSON string. - - The JSON string. - The deserialized XmlNode - - - - Deserializes the XmlNode from a JSON string nested in a root elment. - - The JSON string. - The name of the root element to append when deserializing. - The deserialized XmlNode - - - - The exception thrown when an error occurs during Json serialization or deserialization. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Serializes and deserializes objects into and from the JSON format. - The enables you to control how objects are encoded into JSON. - - - - - Initializes a new instance of the class. - - - - - Creates a new instance using the specified . - - The settings to be applied to the . - A new instance using the specified . - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Populates the JSON values onto the target object. - - The that contains the JSON structure to reader values from. - The target object to populate values onto. - - - - Deserializes the Json structure contained by the specified . - - The that contains the JSON structure to deserialize. - The being deserialized. - - - - Deserializes the Json structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Deserializes the Json structure contained by the specified - into an instance of the specified type. - - The containing the object. - The type of the object to deserialize. - The instance of being deserialized. - - - - Deserializes the Json structure contained by the specified - into an instance of the specified type. - - The containing the object. - The of object being deserialized. - The instance of being deserialized. - - - - Serializes the specified and writes the Json structure - to a Stream using the specified . - - The used to write the Json structure. - The to serialize. - - - - Serializes the specified and writes the Json structure - to a Stream using the specified . - - The used to write the Json structure. - The to serialize. - - - - Occurs when the errors during serialization and deserialization. - - - - - Gets or sets the used by the serializer when resolving references. - - - - - Gets or sets the used by the serializer when resolving type names. - - - - - Gets or sets how type name writing and reading is handled by the serializer. - - - - - Gets or sets how object references are preserved by the serializer. - - - - - Get or set how reference loops (e.g. a class referencing itself) is handled. - - - - - Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. - - - - - Get or set how null values are handled during serialization and deserialization. - - - - - Get or set how null default are handled during serialization and deserialization. - - - - - Gets or sets how objects are created during deserialization. - - The object creation handling. - - - - Gets or sets how constructors are used during deserialization. - - The constructor handling. - - - - Gets a collection that will be used during serialization. - - Collection that will be used during serialization. - - - - Gets or sets the contract resolver used by the serializer when - serializing .NET objects to JSON and vice versa. - - - - - Gets or sets the used by the serializer when invoking serialization callback methods. - - The context. - - - - Contains the LINQ to JSON extension methods. - - - - - Returns a collection of tokens that contains the ancestors of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the ancestors of every node in the source collection. - - - - Returns a collection of tokens that contains the descendants of every token in the source collection. - - The type of the objects in source, constrained to . - An of that contains the source collection. - An of that contains the descendants of every node in the source collection. - - - - Returns a collection of child properties of every object in the source collection. - - An of that contains the source collection. - An of that contains the properties of every object in the source collection. - - - - Returns a collection of child values of every object in the source collection with the given key. - - An of that contains the source collection. - The token key. - An of that contains the values of every node in the source collection with the given key. - - - - Returns a collection of child values of every object in the source collection. - - An of that contains the source collection. - An of that contains the values of every node in the source collection. - - - - Returns a collection of converted child values of every object in the source collection with the given key. - - The type to convert the values to. - An of that contains the source collection. - The token key. - An that contains the converted values of every node in the source collection with the given key. - - - - Returns a collection of converted child values of every object in the source collection. - - The type to convert the values to. - An of that contains the source collection. - An that contains the converted values of every node in the source collection. - - - - Converts the value. - - The type to convert the value to. - A cast as a of . - A converted value. - - - - Converts the value. - - The source collection type. - The type to convert the value to. - A cast as a of . - A converted value. - - - - Returns a collection of child tokens of every array in the source collection. - - The source collection type. - An of that contains the source collection. - An of that contains the values of every node in the source collection. - - - - Returns a collection of converted child tokens of every array in the source collection. - - An of that contains the source collection. - The type to convert the values to. - The source collection type. - An that contains the converted values of every node in the source collection. - - - - Returns the input typed as . - - An of that contains the source collection. - The input typed as . - - - - Returns the input typed as . - - The source collection type. - An of that contains the source collection. - The input typed as . - - - - Represents a JSON constructor. - - - - - Represents a token that can contain other tokens. - - - - - Raises the event. - - The instance containing the event data. - - - - Raises the event. - - The instance containing the event data. - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Returns a collection of the child values of this token, in document order. - - The type to convert the values to. - - A containing the child values of this , in document order. - - - - - Returns a collection of the descendant tokens for this token in document order. - - An containing the descendant tokens of the . - - - - Adds the specified content as children of this . - - The content to be added. - - - - Adds the specified content as the first children of this . - - The content to be added. - - - - Creates an that can be used to add tokens to the . - - An that is ready to have content written to it. - - - - Replaces the children nodes of this token with the specified content. - - The content. - - - - Removes the child nodes from this token. - - - - - Occurs when the list changes or an item in the list changes. - - - - - Occurs before an item is added to the collection. - - - - - Gets a value indicating whether this token has childen tokens. - - - true if this token has child values; otherwise, false. - - - - - Get the first child token of this token. - - - A containing the first child token of the . - - - - - Get the last child token of this token. - - - A containing the last child token of the . - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name and content. - - The constructor name. - The contents of the constructor. - - - - Initializes a new instance of the class with the specified name. - - The constructor name. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Gets or sets the name of this constructor. - - The constructor name. - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Represents a collection of objects. - - The type of token - - - - An empty collection of objects. - - - - - Initializes a new instance of the struct. - - The enumerable. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Determines whether the specified is equal to this instance. - - The to compare with this instance. - - true if the specified is equal to this instance; otherwise, false. - - - - - Returns a hash code for this instance. - - - A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. - - - - - Gets the with the specified key. - - - - - - Represents a JSON object. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Initializes a new instance of the class with the specified content. - - The contents of the object. - - - - Gets an of this object's properties. - - An of this object's properties. - - - - Gets a the specified name. - - The property name. - A with the specified name or null. - - - - Gets an of this object's property values. - - An of this object's property values. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Adds the specified property name. - - Name of the property. - The value. - - - - Removes the property with the specified name. - - Name of the property. - true if item was successfully removed; otherwise, false. - - - - Tries the get value. - - Name of the property. - The value. - true if a value was successfully retrieved; otherwise, false. - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Raises the event with the provided arguments. - - Name of the property. - - - - Occurs when a property value changes. - - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the with the specified property name. - - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - Represents a JSON array. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Initializes a new instance of the class with the specified content. - - The contents of the array. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Load a from a string that contains JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Creates a from an object. - - The object that will be used to create . - A with the values of the specified object - - - - Creates a from an object. - - The object that will be used to create . - The that will be used to read the object. - A with the values of the specified object - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Determines the index of a specific item in the . - - The object to locate in the . - - The index of if found in the list; otherwise, -1. - - - - - Inserts an item to the at the specified index. - - The zero-based index at which should be inserted. - The object to insert into the . - - is not a valid index in the . - The is read-only. - - - - Removes the item at the specified index. - - The zero-based index of the item to remove. - - is not a valid index in the . - The is read-only. - - - - Adds an item to the . - - The object to add to the . - The is read-only. - - - - Removes all items from the . - - The is read-only. - - - - Determines whether the contains a specific value. - - The object to locate in the . - - true if is found in the ; otherwise, false. - - - - - Removes the first occurrence of a specific object from the . - - The object to remove from the . - - true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . - - The is read-only. - - - - Gets the node type for this . - - The type. - - - - Gets the with the specified key. - - The with the specified key. - - - - Gets or sets the at the specified index. - - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. - - - - - Initializes a new instance of the class. - - The token to read from. - - - - Reads the next JSON token from the stream as a . - - - A or a null reference if the next JSON token is null. - - - - - Reads the next JSON token from the stream. - - - true if the next token was read successfully; false if there are no more tokens to read. - - - - - Represents a JSON property. - - - - - Initializes a new instance of the class from another object. - - A object to copy from. - - - - Returns a collection of the child tokens of this token, in document order. - - - An of containing the child tokens of this , in document order. - - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Initializes a new instance of the class. - - The property name. - The property content. - - - - Writes this token to a . - - A into which this method will write. - A collection of which will be used when writing the token. - - - - Loads an from a . - - A that will be read for the content of the . - A that contains the JSON that was read from the specified . - - - - Gets the property name. - - The property name. - - - - Gets or sets the property value. - - The property value. - - - - Gets the node type for this . - - The type. - - - - Specifies the type of token. - - - - - No token type has been set. - - - - - A JSON object. - - - - - A JSON array. - - - - - A JSON constructor. - - - - - A JSON object property. - - - - - A comment. - - - - - An integer value. - - - - - A float value. - - - - - A string value. - - - - - A boolean value. - - - - - A null value. - - - - - An undefined value. - - - - - A date value. - - - - - A raw JSON value. - - - - - A collection of bytes value. - - - - - Contains the JSON schema extension methods. - - - - - Determines whether the is valid. - - The source to test. - The schema to test with. - - true if the specified is valid; otherwise, false. - - - - - Validates the specified . - - The source to test. - The schema to test with. - - - - Validates the specified . - - The source to test. - The schema to test with. - The validation event handler. - - - - Returns detailed information about the schema exception. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with a specified error message. - - The error message that explains the reason for the exception. - - - - Initializes a new instance of the class - with a specified error message and a reference to the inner exception that is the cause of this exception. - - The error message that explains the reason for the exception. - The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. - - - - Gets the line number indicating where the error occurred. - - The line number indicating where the error occurred. - - - - Gets the line position indicating where the error occurred. - - The line position indicating where the error occurred. - - - - Resolves from an id. - - - - - Initializes a new instance of the class. - - - - - Gets a for the specified id. - - The id. - A for the specified id. - - - - Gets or sets the loaded schemas. - - The loaded schemas. - - - - Specifies undefined schema Id handling options for the . - - - - - Do not infer a schema Id. - - - - - Use the .NET type name as the schema Id. - - - - - Use the assembly qualified .NET type name as the schema Id. - - - - - Returns detailed information related to the . - - - - - Gets the associated with the validation event. - - The JsonSchemaException associated with the validation event. - - - - Gets the text description corresponding to the validation event. - - The text description. - - - - Represents the callback method that will handle JSON schema validation events and the . - - - - - Resolves member mappings for a type, camel casing property names. - - - - - Used by to resolves a for a given . - - - - - Used by to resolves a for a given . - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Initializes a new instance of the class. - - - - - Resolves the contract for a given type. - - The type to resolve a contract for. - The contract for a given type. - - - - Gets the serializable members for the type. - - The type to get serializable members for. - The serializable members for the type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Resolves the default for the contract. - - Type of the object. - - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates a for the given type. - - Type of the object. - A for the given type. - - - - Creates properties for the given . - - The contract to create properties for. - Properties for the given . - - - - Creates the used by the serializer to get and set values from a member. - - The member. - The used by the serializer to get and set values from a member. - - - - Creates a for the given . - - The member's declaring types . - The member to create a for. - A created for the given . - - - - Resolves the name of the property. - - Name of the property. - Name of the property. - - - - Gets or sets the default members search flags. - - The default members search flags. - - - - Resolves the name of the property. - - Name of the property. - The property name camel cased. - - - - The default serialization binder used when resolving and loading classes from type names. - - - - - When overridden in a derived class, controls the binding of a serialized object to a type. - - Specifies the name of the serialized object. - Specifies the name of the serialized object. - - The type of the object the formatter creates a new instance of. - - - - - Get and set values for a using dynamic methods. - - - - - Provides methods to get and set values. - - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Provides information surrounding an error. - - - - - Gets or sets the error. - - The error. - - - - Gets the original object that caused the error. - - The original object that caused the error. - - - - Gets the member that caused the error. - - The member that caused the error. - - - - Gets or sets a value indicating whether this is handled. - - true if handled; otherwise, false. - - - - Provides data for the Error event. - - - - - Initializes a new instance of the class. - - The current object. - The error context. - - - - Gets the current object the error event is being raised against. - - The current object the error event is being raised against. - - - - Gets the error context. - - The error context. - - - - Contract details for a used by the . - - - - - Contract details for a used by the . - - - - - Gets the underlying type for the contract. - - The underlying type for the contract. - - - - Gets or sets the type created during deserialization. - - The type created during deserialization. - - - - Gets or sets whether this type contract is serialized as a reference. - - Whether this type contract is serialized as a reference. - - - - Gets or sets the default for this contract. - - The converter. - - - - Gets or sets the method called immediately after deserialization of the object. - - The method called immediately after deserialization of the object. - - - - Gets or sets the method called during deserialization of the object. - - The method called during deserialization of the object. - - - - Gets or sets the method called after serialization of the object graph. - - The method called after serialization of the object graph. - - - - Gets or sets the method called before serialization of the object. - - The method called before serialization of the object. - - - - Gets or sets the default creator. - - The default creator. - - - - Gets or sets a value indicating whether [default creator non public]. - - true if the default object creator is non-public; otherwise, false. - - - - Gets or sets the method called when an error is thrown during the serialization of the object. - - The method called when an error is thrown during the serialization of the object. - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Maps a JSON property to a .NET member. - - - - - Gets the name of the property. - - The name of the property. - - - - Gets the that will get and set the during serialization. - - The that will get and set the during serialization. - - - - Gets or sets the type of the property. - - The type of the property. - - - - Gets or sets the for the property. - If set this converter takes presidence over the contract converter for the property type. - - The converter. - - - - Gets a value indicating whether this is ignored. - - true if ignored; otherwise, false. - - - - Gets a value indicating whether this is readable. - - true if readable; otherwise, false. - - - - Gets a value indicating whether this is writable. - - true if writable; otherwise, false. - - - - Gets the member converter. - - The member converter. - - - - Gets the default value. - - The default value. - - - - Gets a value indicating whether this is required. - - A value indicating whether this is required. - - - - Gets a value indicating whether this property preserves object references. - - - true if this instance is reference; otherwise, false. - - - - - Gets the property null value handling. - - The null value handling. - - - - Gets the property default value handling. - - The default value handling. - - - - Gets the property reference loop handling. - - The reference loop handling. - - - - Gets the property object creation handling. - - The object creation handling. - - - - A collection of objects. - - - - - Initializes a new instance of the class. - - The contract. - - - - When implemented in a derived class, extracts the key from the specified element. - - The element from which to extract the key. - The key for the specified element. - - - - Adds a object. - - The property to add to the collection. - - - - Gets the closest matching object. - First attempts to get an exact case match of propertyName and then - a case insensitive match. - - Name of the property. - A matching property if found. - - - - Gets a property by property name. - - The name of the property to get. - Type property name string comparison. - A matching property if found. - - - - Specifies missing member handling options for the . - - - - - Ignore a missing member and do not attempt to deserialize it. - - - - - Throw a when a missing member is encountered during deserialization. - - - - - Specifies null value handling options for the . - - - - - Include null values when serializing and deserializing objects. - - - - - Ignore null values when serializing and deserializing objects. - - - - - Specifies reference loop handling options for the . - - - - - Throw a when a loop is encountered. - - - - - Ignore loop references and do not serialize. - - - - - Serialize loop references. - - - - - An in-memory representation of a JSON Schema. - - - - - Initializes a new instance of the class. - - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The object representing the JSON Schema. - - - - Reads a from the specified . - - The containing the JSON Schema to read. - The to use when resolving schema references. - The object representing the JSON Schema. - - - - Load a from a string that contains schema JSON. - - A that contains JSON. - A populated from the string that contains JSON. - - - - Parses the specified json. - - The json. - The resolver. - A populated from the string that contains JSON. - - - - Writes this schema to a . - - A into which this method will write. - - - - Writes this schema to a using the specified . - - A into which this method will write. - The resolver used. - - - - Returns a that represents the current . - - - A that represents the current . - - - - - Gets or sets the id. - - - - - Gets or sets the title. - - - - - Gets or sets whether the object is optional. - - - - - Gets or sets whether the object is read only. - - - - - Gets or sets whether the object is visible to users. - - - - - Gets or sets whether the object is transient. - - - - - Gets or sets the description of the object. - - - - - Gets or sets the types of values allowed by the object. - - The type. - - - - Gets or sets the pattern. - - The pattern. - - - - Gets or sets the minimum length. - - The minimum length. - - - - Gets or sets the maximum length. - - The maximum length. - - - - Gets or sets the maximum decimals. - - The maximum decimals. - - - - Gets or sets the minimum. - - The minimum. - - - - Gets or sets the maximum. - - The maximum. - - - - Gets or sets the minimum number of items. - - The minimum number of items. - - - - Gets or sets the maximum number of items. - - The maximum number of items. - - - - Gets or sets the of items. - - The of items. - - - - Gets or sets the of properties. - - The of properties. - - - - Gets or sets the of additional properties. - - The of additional properties. - - - - Gets or sets a value indicating whether additional properties are allowed. - - - true if additional properties are allowed; otherwise, false. - - - - - Gets or sets the required property if this property is present. - - The required property if this property is present. - - - - Gets or sets the identity. - - The identity. - - - - Gets or sets the a collection of valid enum values allowed. - - A collection of valid enum values allowed. - - - - Gets or sets a collection of options. - - A collection of options. - - - - Gets or sets disallowed types. - - The disallow types. - - - - Gets or sets the default value. - - The default value. - - - - Gets or sets the extend . - - The extended . - - - - Gets or sets the format. - - The format. - - - - Generates a from a specified . - - - - - Generate a from the specified type. - - The type to generate a from. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Generate a from the specified type. - - The type to generate a from. - The used to resolve schema references. - Specify whether the generated root will be nullable. - A generated from the specified type. - - - - Gets or sets how undefined schemas are handled by the serializer. - - - - - Gets or sets the contract resolver. - - The contract resolver. - - - - The value types allowed by the . - - - - - No type specified. - - - - - String type. - - - - - Float type. - - - - - Integer type. - - - - - Boolean type. - - - - - Object type. - - - - - Array type. - - - - - Null type. - - - - - Any type. - - - - - Contract details for a used by the . - - - - - Initializes a new instance of the class. - - The underlying type for the contract. - - - - Gets or sets the object member serialization. - - The member object serialization. - - - - Gets the object's properties. - - The object's properties. - - - - Gets or sets the parametrized constructor used to create the object. - - The parametrized constructor. - - - - When applied to a method, specifies that the method is called when an error occurs serializing an object. - - - - - Get and set values for a using reflection. - - - - - Initializes a new instance of the class. - - The member info. - - - - Sets the value. - - The target to set the value on. - The value to set on the target. - - - - Gets the value. - - The target to get the value from. - The value. - - - - Specifies type name handling options for the . - - - - - Do not include the .NET type name when serializing types. - - - - - Include the .NET type name when serializing into a JSON object structure. - - - - - Include the .NET type name when serializing into a JSON array structure. - - - - - Always include the .NET type name when serializing. - - - - - Converts the value to the specified type. - - The type to convert the value to. - The value to convert. - The converted type. - - - - Converts the value to the specified type. - - The type to convert the value to. - The value to convert. - The culture to use when converting. - The converted type. - - - - Converts the value to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert the value to. - The converted type. - - - - Converts the value to the specified type. - - The type to convert the value to. - The value to convert. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully; otherwise, false. - - - - - Converts the value to the specified type. - - The type to convert the value to. - The value to convert. - The culture to use when converting. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully; otherwise, false. - - - - - Converts the value to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert the value to. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully; otherwise, false. - - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The type to convert or cast the value to. - The value to convert. - The converted type. If conversion was unsuccessful, the initial value is returned if assignable to the target type - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The type to convert or cast the value to. - The value to convert. - The culture to use when converting. - The converted type. If conversion was unsuccessful, the initial value is returned if assignable to the target type - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert or cast the value to. - - The converted type. If conversion was unsuccessful, the initial value - is returned if assignable to the target type. - - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The type to convert the value to. - The value to convert. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully or is assignable; otherwise, false. - - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The type to convert the value to. - The value to convert. - The culture to use when converting. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully or is assignable; otherwise, false. - - - - - Converts the value to the specified type. If the value is unable to be converted, the - value is checked whether it assignable to the specified type. - - The value to convert. - The culture to use when converting. - The type to convert the value to. - The converted value if the conversion was successful or the default value of T if it failed. - - true if initialValue was converted successfully or is assignable; otherwise, false. - - - - - Parses the specified enum member name, returning it's value. - - Name of the enum member. - - - - - Parses the specified enum member name, returning it's value. - - Name of the enum member. - If set to true ignore case. - - - - - Gets a dictionary of the names and values of an Enum type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - - - - - Gets a dictionary of the names and values of an Enum type. - - The enum type to get names and values for. - - - - - Gets the maximum valid value of an Enum type. Flags enums are ORed. - - The type of the returned value. Must be assignable from the enum's underlying value type. - The enum type to get the maximum value for. - - - - - Specifies the type of Json token. - - - - - This is returned by the if a method has not been called. - - - - - An object start token. - - - - - An array start token. - - - - - A constructor start token. - - - - - An object property name. - - - - - A comment. - - - - - Raw JSON. - - - - - An interger. - - - - - A float. - - - - - A string. - - - - - A boolean. - - - - - A null token. - - - - - An undefined token. - - - - - An object end token. - - - - - An array end token. - - - - - A constructor end token. - - - - - A Date. - - - - - Byte data. - - - - - Specifies the state of the . - - - - - An exception has been thrown, which has left the in an invalid state. - You may call the method to put the in the Closed state. - Any other method calls results in an being thrown. - - - - - The method has been called. - - - - - An object is being written. - - - - - A array is being written. - - - - - A constructor is being written. - - - - - A property is being written. - - - - - A write method has not been called. - - - - - Specifies formatting options for the . - - - - - No special formatting is applied. This is the default. - - - - - Causes child objects to be indented according to the and settings. - - - - - Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Determines whether the collection is null or empty. - - The collection. - - true if the collection is null or empty; otherwise, false. - - - - - Determines whether the collection is null, empty or its contents are uninitialized values. - - The list. - - true if the collection is null or empty or its contents are uninitialized values; otherwise, false. - - - - - Makes a slice of the specified list in between the start and end indexes. - - The list. - The start index. - The end index. - A slice of the list. - - - - Makes a slice of the specified list in between the start and end indexes, - getting every so many items based upon the step. - - The list. - The start index. - The end index. - The step. - A slice of the list. - - - - Group the collection using a function which returns the key. - - The source collection to group. - The key selector. - A Dictionary with each key relating to a list of objects in a list grouped under it. - - - - Adds the elements of the specified collection to the specified generic IList. - - The list to add to. - The collection of elements to add. - - - - Gets the type of the typed collection's items. - - The type. - The type of the typed collection's items. - - - - Tests whether the list's items are their unitialized value. - - The list. - Whether the list's items are their unitialized value - - - - Gets the member's underlying type. - - The member. - The underlying type of the member. - - - - Determines whether the member is an indexed property. - - The member. - - true if the member is an indexed property; otherwise, false. - - - - - Determines whether the property is an indexed property. - - The property. - - true if the property is an indexed property; otherwise, false. - - - - - Gets the member's value on the object. - - The member. - The target object. - The member's value on the object. - - - - Sets the member's value on the target object. - - The member. - The target. - The value. - - - - Determines whether the specified MemberInfo can be read. - - The MemberInfo to determine whether can be read. - - true if the specified MemberInfo can be read; otherwise, false. - - - - - Determines whether the specified MemberInfo can be set. - - The MemberInfo to determine whether can be set. - - true if the specified MemberInfo can be set; otherwise, false. - - - - - Determines whether the string contains white space. - - The string to test for white space. - - true if the string contains white space; otherwise, false. - - - - - Determines whether the string is all white space. Empty string will return false. - - The string to test whether it is all white space. - - true if the string is all white space; otherwise, false. - - - - - Ensures the target string ends with the specified string. - - The target. - The value. - The target string with the value string at the end. - - - - Perform an action if the string is not null or empty. - - The value. - The action to perform. - - - - Indents the specified string. - - The string to indent. - The number of characters to indent by. - - - - - Indents the specified string. - - The string to indent. - The number of characters to indent by. - The indent character. - - - - - Numbers the lines. - - The string to number. - - - - - Nulls an empty string. - - The string. - Null if the string was null, otherwise the string unchanged. - - - + + + + Newtonsoft.Json.Net20 + + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + + + + + Initializes a new instance of the class with the specified . + + + + + Reads the next JSON token from the stream. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the stream as a . + + A or a null reference if the next JSON token is null. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the state based on current token type. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Releases unmanaged and - optionally - managed resources + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the to Closed. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets the type of the current Json token. + + + + + Gets the text value of the current Json token. + + + + + Gets The Common Language Runtime (CLR) type for the current Json token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Specifies the state of the reader. + + + + + The Read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The Close method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Initializes a new instance of the class. + + The stream. + + + + Initializes a new instance of the class. + + The stream. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the stream as a . + + + A or a null reference if the next JSON token is null. + + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + + + + + Creates an instance of the JsonWriter class. + + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Closes this stream and the underlying stream. + + + + + Writes the beginning of a Json object. + + + + + Writes the end of a Json object. + + + + + Writes the beginning of a Json array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Writes the end of the current Json object or array. + + + + + Writes the current token. + + The to read the token from. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes out the given white space. + + The string of white space characters. + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Indicates how the output is formatted. + + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Closes this stream and the underlying stream. + + + + + Writes the beginning of a Json object. + + + + + Writes the beginning of a Json array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Gets the token being writen. + + The token being writen. + + + + Initializes a new instance of the class. + + The stream. + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor then fall back to single paramatized constructor. + + + + + Allow Json.NET to use a non-public default constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Create a custom object + + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + Type of the property. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. When the or methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The value. + + + + Returns the properties for this instance of a component. + + + A that represents the properties for this component instance. + + + + + Returns the properties for this instance of a component using the attribute array as a filter. + + An array of type that is used as a filter. + + A that represents the filtered properties for this component instance. + + + + + Returns a collection of custom attributes for this instance of a component. + + + An containing the attributes for this object. + + + + + Returns the class name of this instance of a component. + + + The class name of the object, or null if the class does not have a name. + + + + + Returns the name of this instance of a component. + + + The name of the object, or null if the object does not have a name. + + + + + Returns a type converter for this instance of a component. + + + A that is the converter for this object, or null if there is no for this object. + + + + + Returns the default event for this instance of a component. + + + An that represents the default event for this object, or null if this object does not have events. + + + + + Returns the default property for this instance of a component. + + + A that represents the default property for this object, or null if this object does not have properties. + + + + + Returns an editor of the specified type for this instance of a component. + + A that represents the editor for this object. + + An of the specified type that is the editor for this object, or null if the editor cannot be found. + + + + + Returns the events for this instance of a component using the specified attribute array as a filter. + + An array of type that is used as a filter. + + An that represents the filtered events for this component instance. + + + + + Returns the events for this instance of a component. + + + An that represents the events for this component instance. + + + + + Returns an object that contains the property described by the specified property descriptor. + + A that represents the property whose owner is to be found. + + An that represents the owner of the specified property. + + + + + Represents a raw JSON string. + + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Represents an abstract JSON token. + + + + + Represents a collection of objects. + + The type of token + + + + Gets the with the specified key. + + + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if LineNumber and LinePosition can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output is formatted. + A collection of which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Creates an for this token. + + An that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object + + + + Creates a from a . + + An positioned at the token to read into this . + + An that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects the token that matches the object path. + + + The object path from the current to the + to be returned. This must be a string of property names or array indexes separated + by periods, such as Tables[0].DefaultView[0].Price in C# or + Tables(0).DefaultView(0).Price in Visual Basic. + + The that matches the object path or a null reference if no matching token is found. + + + + Selects the token that matches the object path. + + + The object path from the current to the + to be returned. This must be a string of property names or array indexes separated + by periods, such as Tables[0].DefaultView[0].Price in C# or + Tables(0).DefaultView(0).Price in Visual Basic. + + A flag to indicate whether an error should be thrown if no token is found. + The that matches the object path. + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has childen tokens. + + + true if this token has child values; otherwise, false. + + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Gets a value indicating whether this token has childen tokens. + + + true if this token has child values; otherwise, false. + + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The reference to resolve. + The object that + + + + Gets the reference for the sepecified object. + + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The reference. + The object to reference. + + + + Specifies reference handling options for the . + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Instructs the how to serialize the collection. + + + + + Instructs the how to serialize the object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets a value that indicates whether to preserve object reference data. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Specifies default value handling options for the . + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Initializes a new instance of the class. + + Type of the converter. + + + + Gets the type of the converter. + + The type of the converter. + + + + Instructs the how to serialize the object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Gets or sets the member serialization. + + The member serialization. + + + + Specifies the settings on a object. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + + Null value handling. + + + + Gets or sets how null default are handled during serialization and deserialization. + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + + The type name handling. + + + + Gets or sets how constructors are used during deserialization. + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Represents a reader that provides validation. + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Reads the next JSON token from the stream as a . + + + A or a null reference if the next JSON token is null. + + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current Json token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current Json token. + + + + + + Gets The Common Language Runtime (CLR) type for the current Json token. + + + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Specifies the member serialization options for the . + + + + + All members are serialized by default. Members can be excluded using the . + + + + + Only members must be marked with the are serialized. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Converts a to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Converts a to and from a JavaScript date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Specifies whether a DateTime object represents a local time, a Coordinated Universal Time (UTC), or is not specified as either local time or UTC. + + + + + The time represented is local time. + + + + + The time represented is UTC. + + + + + The time represented is not specified as either local time or Coordinated Universal Time (UTC). + + + + + Preserves the DateTimeKind field of a date when a DateTime object is converted to a string and the string is then converted back to a DateTime object. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Checks if the attributeName is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + True if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + + The name of the deserialize root element. + + + + Converts a object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The calling serializer. + The object value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + + + + + Initializes a new instance of the class with the specified . + + The TextReader containing the XML data to read. + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the stream as a . + + + A or a null reference if the next JSON token is null. + + + + + Changes the state to closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if LineNumber and LinePosition can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + + + + + Instructs the to always serialize the member with the specified name. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating Json data. + + + + + Creates an instance of the JsonWriter class using the specified . + + The TextWriter to write to. + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Closes this stream and the underlying stream. + + + + + Writes the beginning of a Json object. + + + + + Writes the beginning of a Json array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes out the given white space. + + The string of white space characters. + + + + Gets or sets how many IndentChars to write for each level in the hierarchy when is set to Formatting.Indented. + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to Formatting.Indented. + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + The exception thrown when an error occurs while reading Json text. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + The exception thrown when an error occurs while reading Json text. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Represents a collection of . + + + + + Provides methods for converting between common language runtime types and JSON types. + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string. + + The object to serialize. + Indicates how the output is formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + Indicates how the output is formatted. + A collection converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + Indicates how the output is formatted. + The used to serialize the object. + If this is null, default serialization settings will be is used. + + A JSON string representation of the object. + + + + + Deserializes the specified object to a Json object. + + The object to deserialize. + The deserialized object from the Json string. + + + + Deserializes the specified object to a Json object. + + The object to deserialize. + The of object being deserialized. + The deserialized object from the Json string. + + + + Deserializes the specified object to a Json object. + + The type of the object to deserialize. + The object to deserialize. + The deserialized object from the Json string. + + + + Deserializes the specified JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + + The object to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON string to the specified type. + + The type of the object to deserialize. + The object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON string to the specified type. + + The type of the object to deserialize. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be is used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON string to the specified type. + + The object to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON string to the specified type. + + The JSON to deserialize. + The type of the object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be is used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be is used. + + + + + Serializes the XML node to a JSON string. + + The node to serialize. + A JSON string of the XmlNode. + + + + Deserializes the XmlNode from a JSON string. + + The JSON string. + The deserialized XmlNode + + + + Deserializes the XmlNode from a JSON string nested in a root elment. + + The JSON string. + The name of the root element to append when deserializing. + The deserialized XmlNode + + + + The exception thrown when an error occurs during Json serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance using the specified . + + The settings to be applied to the . + A new instance using the specified . + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Deserializes the Json structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the Json structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the Json structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the Json structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the Json structure + to a Stream using the specified . + + The used to write the Json structure. + The to serialize. + + + + Serializes the specified and writes the Json structure + to a Stream using the specified . + + The used to write the Json structure. + The to serialize. + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets how type name writing and reading is handled by the serializer. + + + + + Gets or sets how object references are preserved by the serializer. + + + + + Get or set how reference loops (e.g. a class referencing itself) is handled. + + + + + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + + + + + Get or set how null values are handled during serialization and deserialization. + + + + + Get or set how null default are handled during serialization and deserialization. + + + + + Gets or sets how objects are created during deserialization. + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + + The constructor handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every node in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every node in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every node in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every node in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every node in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every node in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every node in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every node in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a JSON constructor. + + + + + Represents a token that can contain other tokens. + + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An containing the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates an that can be used to add tokens to the . + + An that is ready to have content written to it. + + + + Replaces the children nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Gets a value indicating whether this token has childen tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Gets the with the specified key. + + The with the specified key. + + + + Represents a collection of objects. + + The type of token + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Gets the with the specified key. + + + + + + Represents a JSON object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets an of this object's properties. + + An of this object's properties. + + + + Gets a the specified name. + + The property name. + A with the specified name or null. + + + + Gets an of this object's property values. + + An of this object's property values. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries the get value. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Occurs when a property value changes. + + + + + Gets the node type for this . + + The type. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Represents a JSON array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + The is read-only. + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + The is read-only. + + + + Adds an item to the . + + The object to add to the . + The is read-only. + + + + Removes all items from the . + + The is read-only. + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + The is read-only. + + + + Gets the node type for this . + + The type. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized Json data. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Reads the next JSON token from the stream as a . + + + A or a null reference if the next JSON token is null. + + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a JSON property. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Gets the node type for this . + + The type. + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + Contains the JSON schema extension methods. + + + + + Determines whether the is valid. + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + Validates the specified . + + The source to test. + The schema to test with. + + + + Validates the specified . + + The source to test. + The schema to test with. + The validation event handler. + + + + Returns detailed information about the schema exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Resolves from an id. + + + + + Initializes a new instance of the class. + + + + + Gets a for the specified id. + + The id. + A for the specified id. + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Specifies undefined schema Id handling options for the . + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + Returns detailed information related to the . + + + + + Gets the associated with the validation event. + + The JsonSchemaException associated with the validation event. + + + + Gets the text description corresponding to the validation event. + + The text description. + + + + Represents the callback method that will handle JSON schema validation events and the . + + + + + Resolves member mappings for a type, camel casing property names. + + + + + Used by to resolves a for a given . + + + + + Used by to resolves a for a given . + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Resolves the default for the contract. + + Type of the object. + + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The contract to create properties for. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's declaring types . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Name of the property. + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Resolves the name of the property. + + Name of the property. + The property name camel cased. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + Get and set values for a using dynamic methods. + + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets or sets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Contract details for a used by the . + + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets or sets the method called immediately after deserialization of the object. + + The method called immediately after deserialization of the object. + + + + Gets or sets the method called during deserialization of the object. + + The method called during deserialization of the object. + + + + Gets or sets the method called after serialization of the object graph. + + The method called after serialization of the object graph. + + + + Gets or sets the method called before serialization of the object. + + The method called before serialization of the object. + + + + Gets or sets the default creator. + + The default creator. + + + + Gets or sets a value indicating whether [default creator non public]. + + true if the default object creator is non-public; otherwise, false. + + + + Gets or sets the method called when an error is thrown during the serialization of the object. + + The method called when an error is thrown during the serialization of the object. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member. + + + + + Gets the name of the property. + + The name of the property. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes presidence over the contract converter for the property type. + + The converter. + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets the member converter. + + The member converter. + + + + Gets the default value. + + The default value. + + + + Gets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets the property null value handling. + + The null value handling. + + + + Gets the property default value handling. + + The default value handling. + + + + Gets the property reference loop handling. + + The reference loop handling. + + + + Gets the property object creation handling. + + The object creation handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The contract. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + An in-memory representation of a JSON Schema. + + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains schema JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Parses the specified json. + + The json. + The resolver. + A populated from the string that contains JSON. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is optional. + + + + + Gets or sets whether the object is read only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets the maximum decimals. + + The maximum decimals. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the identity. + + The identity. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets a collection of options. + + A collection of options. + + + + Gets or sets disallowed types. + + The disallow types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the extend . + + The extended . + + + + Gets or sets the format. + + The format. + + + + Generates a from a specified . + + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + The value types allowed by the . + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the parametrized constructor used to create the object. + + The parametrized constructor. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Specifies type name handling options for the . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Converts the value to the specified type. + + The type to convert the value to. + The value to convert. + The converted type. + + + + Converts the value to the specified type. + + The type to convert the value to. + The value to convert. + The culture to use when converting. + The converted type. + + + + Converts the value to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert the value to. + The converted type. + + + + Converts the value to the specified type. + + The type to convert the value to. + The value to convert. + The converted value if the conversion was successful or the default value of T if it failed. + + true if initialValue was converted successfully; otherwise, false. + + + + + Converts the value to the specified type. + + The type to convert the value to. + The value to convert. + The culture to use when converting. + The converted value if the conversion was successful or the default value of T if it failed. + + true if initialValue was converted successfully; otherwise, false. + + + + + Converts the value to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert the value to. + The converted value if the conversion was successful or the default value of T if it failed. + + true if initialValue was converted successfully; otherwise, false. + + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The type to convert or cast the value to. + The value to convert. + The converted type. If conversion was unsuccessful, the initial value is returned if assignable to the target type + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The type to convert or cast the value to. + The value to convert. + The culture to use when converting. + The converted type. If conversion was unsuccessful, the initial value is returned if assignable to the target type + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The type to convert the value to. + The value to convert. + The converted value if the conversion was successful or the default value of T if it failed. + + true if initialValue was converted successfully or is assignable; otherwise, false. + + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The type to convert the value to. + The value to convert. + The culture to use when converting. + The converted value if the conversion was successful or the default value of T if it failed. + + true if initialValue was converted successfully or is assignable; otherwise, false. + + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert the value to. + The converted value if the conversion was successful or the default value of T if it failed. + + true if initialValue was converted successfully or is assignable; otherwise, false. + + + + + Parses the specified enum member name, returning it's value. + + Name of the enum member. + + + + + Parses the specified enum member name, returning it's value. + + Name of the enum member. + If set to true ignore case. + + + + + Gets a dictionary of the names and values of an Enum type. + + + + + + Gets a dictionary of the names and values of an Enum type. + + + + + + Gets a dictionary of the names and values of an Enum type. + + The enum type to get names and values for. + + + + + Gets the maximum valid value of an Enum type. Flags enums are ORed. + + The type of the returned value. Must be assignable from the enum's underlying value type. + The enum type to get the maximum value for. + + + + + Specifies the type of Json token. + + + + + This is returned by the if a method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An interger. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls results in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + A array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Determines whether the collection is null, empty or its contents are uninitialized values. + + The list. + + true if the collection is null or empty or its contents are uninitialized values; otherwise, false. + + + + + Makes a slice of the specified list in between the start and end indexes. + + The list. + The start index. + The end index. + A slice of the list. + + + + Makes a slice of the specified list in between the start and end indexes, + getting every so many items based upon the step. + + The list. + The start index. + The end index. + The step. + A slice of the list. + + + + Group the collection using a function which returns the key. + + The source collection to group. + The key selector. + A Dictionary with each key relating to a list of objects in a list grouped under it. + + + + Adds the elements of the specified collection to the specified generic IList. + + The list to add to. + The collection of elements to add. + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Tests whether the list's items are their unitialized value. + + The list. + Whether the list's items are their unitialized value + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the member is an indexed property. + + The member. + + true if the member is an indexed property; otherwise, false. + + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Determines whether the string contains white space. + + The string to test for white space. + + true if the string contains white space; otherwise, false. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Ensures the target string ends with the specified string. + + The target. + The value. + The target string with the value string at the end. + + + + Perform an action if the string is not null or empty. + + The value. + The action to perform. + + + + Indents the specified string. + + The string to indent. + The number of characters to indent by. + + + + + Indents the specified string. + + The string to indent. + The number of characters to indent by. + The indent character. + + + + + Numbers the lines. + + The string to number. + + + + + Nulls an empty string. + + The string. + Null if the string was null, otherwise the string unchanged. + + + diff --git a/bin/libbulletnet.dll b/bin/libbulletnet.dll index 3edd005cc893bff51d9a01bca04d560d0fee15d4..8ec7c55da4ff6777fca389342d5f97bf44bac151 100644 GIT binary patch delta 69128 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 wo>I?gkKZFCv*bAVs+0#zs6cb1Dc7{rv Date: Fri, 12 Mar 2010 14:39:51 -0800 Subject: [PATCH 2/2] Minor tweak to clean up SimianGrid asset service URLs --- .../Connectors/SimianGrid/SimianAssetServiceConnector.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs index 7cb075e803..1c22a72bc4 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs @@ -101,7 +101,7 @@ namespace OpenSim.Services.Connectors.SimianGrid throw new Exception("Asset connector init error"); } - if (!serviceUrl.EndsWith("/")) + if (!serviceUrl.EndsWith("/") && !serviceUrl.EndsWith("=")) serviceUrl = serviceUrl + '/'; m_serverUrl = serviceUrl;