我有json字符串
{"AccountNo":"345234533466","AuthValue":"{\"TopUpMobileNumber\":\"345234533466\",\"VoucherAmount\":\"100\"}"}
解析这个字符串我创建了类
public class UserContext
{
public string AccountNo { get; set; }
public string AuthValue { get; set; }
}
<\ n>在AuthValue中,它为我输出{\"TopUpMobileNumber\":\"345234533466\",\"VoucherAmount\":\"100\"}
这绝对是正确的。现在我想以这样的方式修改我的类,我想要{string}格式的AuthValue
和单独的成员变量格式。
所以我以这种方式修改我的课程,但它给出了错误
public class UserContext
{
public string AccountNo { get; set; }
public string AuthValue { get; set; }
public Auth ????? { get; set; }
}
public class Auth
{
public string TopUpMobileNumber { get; set; }
public string VoucherAmount { get; set; }
}
我的要求是
解析逻辑
UserContext conObj1 = new UserContext();
conObj1 = JsonConvert.DeserializeObject<UserContext>(context);
注意:不允许修改json字符串。
答案 0 :(得分:2)
我对JsonConvert或Json.NET不太熟悉,所以我不确定有哪些选项可用。我个人之后立即再次呼叫解串器。
UserContext conObj1 = new UserContext();
conObj1 = JsonConvert.DeserializeObject<UserContext>(context);
conObj1.AuthObject = JsonConvert.DeserializeObject<Auth>(conObj1.AuthValue);
如果需要,可以将其移动到类中,并直接从反序列化的类中调用它。
public class UserContext
{
public string AccountNo { get; set; }
public string AuthValue { get; set; }
public Auth AuthObject { get; private set; }
internal UserContext Deserialize()
{
// Serialize the object
this.AuthObject = JsonConvert.DeserializeObject<Auth>(this.AuthValue);
// Return this object for a simple single-line call.
return this;
}
}
// Single object
UserContext conObj1 = new UserContext();
conObj1 = JsonConvert.DeserializeObject<UserContext>(context).Deserialize();
// Enumeration of object (given that this is supported in JsonConvert)
IEnumerable<UserContext> conObjs = JsonConvert.DeserializeObject<IEnumerable<UserContext>(contexts).Select(c => c.Deserialize()).ToList();
或者如果你觉得自己很讨厌,你可以在访问该属性时进行反序列化(尽管由于它可能导致的许多问题,我几乎不惜一切代价来避免这种情况)。
public class UserContext
{
private Auth m_auth;
public string AccountNo { get; set; }
public string AuthValue { get; set; }
public Auth AuthObject
{
get
{
if (this.m_auth == null)
{
this.m_auth = JsonConvert.DeserializeObject<Auth>(this.AuthValue);
}
return this.m_auth;
}
}
}
答案 1 :(得分:2)
我建议使用两个类 - 一个用于您实际接收的JSON,然后一个用于您想要使用的对象模型:
public class JsonUserContext
{
public string AccountNo { get; set; }
public string AuthValue { get; set; }
}
public class UserContext
{
public string AccountNo { get; set; }
public Auth AuthValue { get; set; }
}
public class Auth
{
public string TopUpMobileNumber { get; set; }
public string VoucherAmount { get; set; }
}
...
var jsonUserContext = JsonConvert.DeserializeObject<JsonUserContext>(json);
var authJson = jsonUserContext.AuthValue;
var userContext = new UserContext {
AccountNo = jsonUserContext.AccountNo,
AuthValue = JsonConvert.DeserializeObject<JsonUserContext>(authJson);
};