gpt4 book ai didi

c# - 在 C# 中用可变参数表示 JSON 的类的最佳方法

转载 作者:太空狗 更新时间:2023-10-29 23:31:51 24 4
gpt4 key购买 nike

我在 WCF 中有一个 Web 服务,其操作需要 JSON 格式的请求和响应。我知道我可以只编写 C# 对象,其中包含我想要在 JSON 中表示的属性,但我的问题是 JSON 参数可能会改变。例如,我的方法契约如下:

    [WebInvoke(Method = "PUT", 
UriTemplate = "users",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
Response PutUserAccount(User user);

User 的参数可能包含任意数量的参数,因此 User 的实例有时可能是:

{
"Name" : "John",
"LastName" : "Doe",
"Email" : "jdoe@gmail.com",
"Username" : "jdoe",
"Gender" : "M"
"Phone" : "9999999"
}

甚至:

{
"Name" : "John",
"LastName" : "Doe",
"Email" : "jdoe@gmail.com",
"Username" : "jdoe",
"FavoriteColor" : "Blue"
}

使用具有可变数量属性的对象来表示 JSON 文档的最佳方法是什么?

编辑 此类允许我拥有灵活的 JSON 表示,因为我不能将 JObject 与 WCF 一起使用(我应该将其作为答案发布吗?):

using System; 
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace MyNamespace {
[Serializable]
public class Data : ISerializable
{
internal Dictionary<string, object> Attributes { get; set; }

public Data()
{
Attributes = new Dictionary<string, object>();
}

public Data(Dictionary<string, object> data)
{
Attributes = data;
}

protected Data(SerializationInfo info, StreamingContext context)
: this()
{
SerializationInfoEnumerator e = info.GetEnumerator();
while (e.MoveNext())
{
Attributes[e.Name] = e.Value;
}
}

public void GetObjectData(SerializationInfo info, StreamingContext context)
{
foreach (string key in Attributes.Keys)
{
info.AddValue(key, Attributes[key]);
}
}

public void Add(string key, object value)
{
Attributes.Add(key, value);
}

public object this[string index]
{
set { Attributes[index] = value; }
get
{
if (Attributes.ContainsKey(index))
return Attributes[index];
else
return null;
}
}
}

最佳答案

您可以使用 Json.NET 中的 JObject 类.您可以将 json 解析为 JObject 属性并对其进行操作。 JObject 不仅仅是一个字典。

关于c# - 在 C# 中用可变参数表示 JSON 的类的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18837419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com