我正在使用Json.NET来创建json的定义,其结构可能会发生变化.因此,我无法简单地序列化一个类,并使用Json到 Linq动态创建结构.我在使用JObject,JArray,JProperty等创建以下结构时遇到问题 { 'ext
{ 'external_id':'UNIQUE_ID_222222222', 'firstname':'John', 'lastname':'Smith', 'customFields': { 'custom1':'custom1 val', 'custom2':'custom2 val', 'custom3"':'custom3 val' } }
我尝试使用以下代码:
Dim json As New JArray() Dim jsonObj As New JObject( _ New JProperty("external_id", "UNIQUE_ID_222222222"), New JProperty("firstname", "John"), New JProperty("lastname", "Smith")) Dim jsonCustomFields As New JArray Dim jsonCustomObject As New JObject jsonCustomFields.Add(jsonCustomObject) For Each field In CustomFieldList jsonCustomObject.Add(New JProperty(field.Label, field.Value)) Next jsonObj.Add(New JProperty("customFields", jsonCustomFields)) json.Add(jsonContrib)
但是,当我这样做时,我得到了一个Web服务不接受的不同模式
{[ { "external_id": "50702", "firstname": "John", "lastname": "Smithson", "customFields": [ { "custom1":"custom1 val", "custom2":"custom2 val", "custom3":"custom3 val" } ] } ]}
我认为我应该直接向JArray添加属性,但这样做会导致运行时异常.
我看到了一个类似的模式,当您反序列化一个Dictionary(String,String)对象时,我不会真的想将自定义字段添加到字典然后反序列化它们.必须可以使用上述表示法创建它们.
您不需要JArray,而是使用JObject以下代码是C#,但你可以搞清楚
JObject jObject = new JObject(); jObject.Add(new JProperty("external_id", "UNIQUE_ID_222222222")); jObject.Add(new JProperty( "firstname", "John" )); jObject.Add(new JProperty( "lastname", "Smith" )); JObject customFields = new JObject(); //Your loop customFields.Add( "custom1", "custom1 val" ); customFields.Add( "custom2", "custom2 val" ); customFields.Add( "custom3", "custom3 val" ); jObject.Add( new JProperty( "customFields", customFields ) );
让我知道这是否有效