相关疑难解决方法(0)

如何使用JSON.NET反序列化为嵌套/递归的Dictionary和List?

我需要将复杂的JSON blob反序列化为标准的.NET容器,以便在不了解JSON的代码中使用.它期望的事情是在标准的.NET类型,具体地Dictionary<string, object>List<object>其中"对象"可以是原语或递归(词典或列表).

我不能使用静态类型来映射结果,并且JObject/JToken不适合.理想情况下,有一些方法(通过Contracts可能?)将原始JSON转换为基本的.NET容器.

我一直在寻找任何方式来哄骗JSON.NET反序列化器在遇到"{}"或"[]"时创建这些简单类型,但收效甚微.

任何帮助赞赏!

.net json json.net deserialization

42
推荐指数
3
解决办法
2万
查看次数

Json.NET:反序列化嵌套字典

将对象反序列化为Dictionary(JsonConvert.DeserializeObject<IDictionary<string,object>>(json))嵌套对象时,将其反序列化为JObjects.是否可以强制嵌套对象反序列化为Dictionarys?

c# serialization json json.net deserialization

33
推荐指数
2
解决办法
2万
查看次数

字典<string,object> -to-BsonDocument转换省略_t字段

我正在使用ToBsonDocument扩展方法MongoDB.Bson来转换这个字典:

        var dictionary = new Dictionary<string, object> {{"person", new Dictionary<string, object> {{"name", "John"}}}};
        var document = dictionary.ToBsonDocument();
Run Code Online (Sandbox Code Playgroud)

这是结果文件:

  { "person" : 
      { "_t" : "System.Collections.Generic.Dictionary`2[System.String,System.Object]", 
        "_v" : { "name" : "John" } } }
Run Code Online (Sandbox Code Playgroud)

有没有办法摆脱这些_t/_v的东西?我希望生成的文档看起来像这样:

  { "person" : { "name" : "John" } }
Run Code Online (Sandbox Code Playgroud)

UPD:我在DictionaryGenericSerializer中找到了代码:

if (nominalType == typeof(object))
{
    var actualType = value.GetType();
    bsonWriter.WriteStartDocument();
    bsonWriter.WriteString("_t", TypeNameDiscriminator.GetDiscriminator(actualType));
    bsonWriter.WriteName("_v");
    Serialize(bsonWriter, actualType, value, options); // recursive call replacing nominalType with actualType
    bsonWriter.WriteEndDocument();
    return;
}
Run Code Online (Sandbox Code Playgroud)

因此,当值类型为时,似乎没有太多选项可用于此序列化程序object.

c# dictionary mongodb bson

8
推荐指数
2
解决办法
1万
查看次数

使用C#在mongoDB中存储具有多态值的字典

让我们说我们有一个关键值,它们的意义上是多态的.考虑下一个示例项目:

public class ToBeSerialized
{
    [BsonId]
    public ObjectId MongoId;
    public IDictionary<string, BaseType> Dictionary;
}

public abstract class BaseType
{
}

public class Type1 : BaseType
{
    public string Value1;
}

public class Type2:BaseType
{
    public string Value1;
    public string Value2;
}


internal class Program
{
    public static void Main()
    {
        var objectToSave = new ToBeSerialized
                               {
                                   MongoId = ObjectId.GenerateNewId(),
                                   Dictionary = new Dictionary<string, BaseType>
                                                    {
                                                        {"OdEd1", new Type1 {Value1="value1"}},
                                                        {
                                                            "OdEd2",
                                                            new Type1 {Value1="value1"}
                                                            }
                                                    }
                               };
        string connectionString = …
Run Code Online (Sandbox Code Playgroud)

c# mongodb mongodb-.net-driver

6
推荐指数
1
解决办法
3020
查看次数