3

データを選択するクエリがあります:

Public Function GetStaffList(StaffCode As String) As IEnumerable
   Dim query = (From c In Staff Where c.StaffID= StaffCode Select c)
   Return query
End Function

その後、以下のコードを使用して Json を返します。

Public Function GetPersonListJson(PersonCode As String) As String 
   Return JsonConvert.SerializeObject(GetStaffList(StaffCode))
End Function

Json 形式は次のとおりです。

"[{\"$id\":\"1\",\"PersonID\":10001.0,\"PersonName\":\"Staff1\"}]"

XML 形式で返したい場合はどうすればよいですか? ありがとう

更新:次のコードを使用して xml を返そうとします

   Public Function GetPersonListJson(PersonCode As String) As String 
       Dim json = JsonConvert.SerializeObject(GetStaffList(StaffCode))
       Dim rootJson = "{""root"":" & json & "}"
       Dim xml = JsonConvert.DeserializeXNode(rootJson)
       Return xml.ToString()
    End Function

デバッグ中の xml の値は次のとおりです。

<root xmlns:json="http://james.newtonking.com/projects/json" json:id="1"><PersonID>10001</PersonID><PersonName>Staff1</PersonName> <EntityKey json:id="2"><EntitySetName>tblPerson</EntitySetName><EntityContainerName>PersonEntities</EntityContainerName><EntityKeyValues><Key>PersonID</Key><Type>System.Decimal</Type><Value>10001</Value></EntityKeyValues></EntityKey></root>

.ToString() を追加すると、次のような結果が返されます。

"\u000d\u000a \u000d\u000a 10001<\/PersonID>\u000d\u000a Staff1<\/PersonName>\u000d\u000a \u000d\u000a 

ただし、これは xml 形式ではありません。もう一度助けてください。ありがとう

4

3 に答える 3

3

DeserializeXNodeメソッドを使用できます。JSON に基づいて、XML 要素のルート要素名を指定する必要がある可能性があります。以下では、「Staff」をルート名として使用しています。

Dim xml = JsonConvert.DeserializeXNode(json, "Staff")

上記は を返しますXDocument。XML を文字列として返すには.ToString()、末尾に を追加します。コメントに基づいて、このコードを既存のGetPersonListJsonメソッドに追加しようとしているようです。したがって、上記の行の後に次の行を追加できます。

Return xml.ToString()

とはいえ、メソッド名は実際に行っているものと一致しなくなりました。名前GetPersonListJsonが付けられていますが、JSON ではなく XML を文字列として返すようになりました。わかりやすくするために名前を変更することをお勧めします。

更新:サンプル文字列はjson配列であるため、上記でXmlNodeConverter can only convert JSON that begins with an objectエラーが発生します。これを修正するには、JSON にルート要素を手動で追加する必要があります。

Public Function GetPersonListJson(PersonCode As String) As String 
   Dim json = JsonConvert.SerializeObject(GetStaffList(StaffCode))

   ' this step adds a root to the json (you can rename "root" to anything)'
   Dim rootJson = "{""root"":" & json & "}"

   Dim xml = JsonConvert.DeserializeXNode(rootJson)
   Return xml.ToString()
End Function
于 2013-09-24T15:53:47.560 に答える