AJA*_*ATI 2 json json.net c#-3.0 asp.net-mvc-4 json-deserialization
嗨,我将xml作为字符串传递
<AbcDto xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Abc">
<Id>2</Id>
<Description>sample string 4</Description>
<Name>sample string 3</Name>
<PolicyId>c17f5b9f-c9bf-4a3a-b09b-f44ec84b0d00</PolicyId>
<Status>Active</Status>
<TimeZoneId>USCentral</TimeZoneId>
</AbcDto>
Run Code Online (Sandbox Code Playgroud)
当我尝试为Web Api创建自定义模型活页夹时
public bool BindModel(System.Web.Http.Controllers.HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var json = actionContext.Request.Content.ReadAsStringAsync().Result;
if (!string.IsNullOrEmpty(json))
{
var jsonObject = (JObject) Newtonsoft.Json.JsonConvert.DeserializeObject(json);
var jsonPropertyNames = jsonObject.Properties().Select(p => p.Name).ToList();
Run Code Online (Sandbox Code Playgroud)
作为参数传递给以下方法的json字符串是xml,因为我在Newtonsoft.Json.JsonConvert.DeserializeObject(json);处遇到异常。异常详细信息:解析值<时遇到意外字符。路径'',第0行,位置0。
您收到错误消息,因为JsonConvert.DeserializeObject()需要JSON输入,而不是XML。如果要使用来处理XML,则JObject需要先将XML转换为JSON。本JsonConvert类有一个SerializeXmlNode()用于此目的的方法。
演示:
class Program
{
static void Main(string[] args)
{
string json = @"
<AbcDto xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.datacontract.org/2004/07/Abc"">
<Id>2</Id>
<Description>sample string 4</Description>
<Name>sample string 3</Name>
<PolicyId>c17f5b9f-c9bf-4a3a-b09b-f44ec84b0d00</PolicyId>
<Status>Active</Status>
<TimeZoneId>USCentral</TimeZoneId>
</AbcDto>";
// If the json string contains XML, convert it to JSON
if (json.TrimStart().StartsWith("<"))
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(json);
json = JsonConvert.SerializeXmlNode(doc, Formatting.None, true);
}
// Now you can load the JSON into a JObject
var jsonObject = JObject.Parse(json);
var jsonPropertyNames = jsonObject.Properties().Select(p => p.Name).ToList();
foreach (string name in jsonPropertyNames)
{
Console.WriteLine(name);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
@xmlns:i
@xmlns
Id
Description
Name
PolicyId
Status
TimeZoneId
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10734 次 |
| 最近记录: |